После генерации, пароль скопирован в буфер обмена.
Программу можно собрать компиляторами Borland или от Microsoft.

- Код: Выделить всё
// PwdGen.cpp
//
// Password generator.
// After generation, copies the result to clipboard.
#ifdef _MSC_VER
#pragma comment(lib,"comctl32.lib")
#endif
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
#define VAL_MIN 3 // Минимальная длина пароля.
#define VAL_MAX 12 // Максимальная длина пароля.
#define VAL_DEFAULT 8 // Длина для генерации по умолчанию.
char* GAppname="Pwd Gen'"; // Заголовок диалогового окна.
BOOL CopyToClipboard(char* str) {
// Функция копирует текст в Буфер Обмена.
BOOL bRet=FALSE;
CloseClipboard();
if (OpenClipboard(GetActiveWindow())) {
EmptyClipboard();
HGLOBAL GlobalMem=GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE,lstrlen(str)+1);
if (GlobalMem) {
char* Data=(char*)GlobalLock(GlobalMem);
lstrcpy(Data,str);
GlobalUnlock(GlobalMem);
if (SetClipboardData(CF_TEXT,GlobalMem))
bRet=1;
}
CloseClipboard();
}
return bRet;
}
BOOL IsTrue() {
return (rand()%2)?FALSE:TRUE;
}
char* Generate_Pwd(int nPwdLength, BOOL bStrong)
{
srand(GetTickCount());
char* svAbc="a1b2c3d4e5f6g7h8i9j0klmnopqrstuvwxyz";
static char svBuff[256];
svBuff[0]=0;
int n=nPwdLength;
if (!bStrong)
{
n=rand()%nPwdLength;
if (n<9) n=9;
}
UINT val=rand()%36;
UINT val2=val;
BOOL bDone=0;
char svTemp[3];
for (int i=0;i<n;++i)
{
wsprintf(svTemp,"%c",svAbc[val]);
if (!IsTrue())
strupr(svTemp);
lstrcat(svBuff,svTemp);
if (bDone<7)// Add "_"
{
++bDone;
if (!IsTrue())
{
if (!IsTrue())
lstrcat(svBuff,"_");
else if (IsTrue())
lstrcat(svBuff,"!");
else
lstrcat(svBuff,"*");
++i;
}
}
val=rand()%36;
while (val==val2)
val=rand()%36;
val2=val;
}
CopyToClipboard(svBuff); // Copy to clipboard.
return svBuff;
}
BOOL OnCommand(HWND hWnd, WPARAM wParam, LPARAM) {
// Item, control or accelerator identifier.
int wId=LOWORD(wParam);
// Notification code.
//int wNotifyCode=HIWORD(wParam);
// Handle of control.
//HWND hwndCtl=(HWND)lParam;
switch (wId) {
case IDOK: {
int n = SendMessage(GetDlgItem(hWnd,IDC_SLIDER1),
TBM_GETPOS,0,0);
SetDlgItemText(hWnd,
IDC_EDIT1,Generate_Pwd(n,TRUE));
}
break;
case IDCANCEL:
EndDialog(hWnd,IDCANCEL);
//break;
} // End wId
return TRUE;
}
BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
char svBuff[32];
switch (uMsg)
{
case WM_INITDIALOG: {
// Set icon.
HICON Icon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MAINFRAME));
if (!Icon) Icon=LoadIcon(GetModuleHandle(NULL),IDI_APPLICATION);
SendMessage(hWnd,WM_SETICON,ICON_BIG,(LPARAM)Icon);
// Set app name.
SetWindowText(hWnd,GAppname);
// Set font.
HFONT hFont=CreateFont(24,0,0,0,FW_NORMAL,0,0,0,GetACP(),0,0,0,0,"Tahoma");
SendDlgItemMessage(hWnd,IDC_EDIT1,WM_SETFONT,(WPARAM)hFont,0);
// Set static slider.
SetDlgItemText(hWnd,IDC_ST_INFO,"Password length");
wsprintf(svBuff,"%d symbol",VAL_DEFAULT);
SetDlgItemText(hWnd,IDC_ST_SYMBOL,svBuff);
// Set slider range min-max.
SendDlgItemMessage(hWnd,IDC_SLIDER1,
TBM_SETRANGE,(WPARAM)TRUE,
(LPARAM)MAKELONG(VAL_MIN,VAL_MAX));
// Set slider default position.
SendDlgItemMessage(hWnd,IDC_SLIDER1,
TBM_SETPOS,(WPARAM)(BOOL)TRUE,
(LPARAM)(LONG)VAL_DEFAULT);
}
return TRUE;
case WM_COMMAND:
return OnCommand(hWnd,wParam,lParam);
case WM_HSCROLL: {
HWND hwndSlider=GetDlgItem(hWnd,IDC_SLIDER1);
if (hwndSlider) {
if ((HWND)lParam==hwndSlider) {
int i=SendMessage(hwndSlider,TBM_GETPOS,0,0);
wsprintf(svBuff,"%i symbol",i);
SetDlgItemText(hWnd,IDC_ST_SYMBOL,svBuff);
}
} // End if (hwndSlider)
}// End case WM_HSCROLL
return TRUE;
case WM_CLOSE:
EndDialog(hWnd,IDCANCEL);
return TRUE;
case WM_DESTROY:
return TRUE;
} // End uMsg
return FALSE;
}
/*
* Entry point.
*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) {
InitCommonControls();
return DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_MAIN_DIALOG),(HWND)NULL,(DLGPROC)DlgProc,(LPARAM)NULL);
}
