Window Hacker

This program is a great tool to have. It allows you to take control of

window controls and their handles. This is like Spy++ but free. Theres

a dll that allows you to control a window from a batch file just use

rundll32 with it like

 

rundll32 libwndhack.dll,CloseHWND search_query

rundll32 libwndhack.dll,ShowHWND search_query

rundll32 libwndhack.dll,ClickButton search_query

rundll32 libwndhack.dll,EnableHWND search_query

rundll32 libwndhack.dll,DisableHWND search_query

 

The search_query is the string that will be searched for.

 

Here’s a screenshot of the program:

wndhacker.jpg

 

            More tools and apps avaliable at

                  www.delphijustin.biz

 

  1. unit wndhackUnit1;
  2. {$RESOURCE wndhack32.res}
  3. interface
  4. //Main window unit
  5. uses
  6. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7. Menus, StdCtrls, ExtCtrls,shellapi, ComCtrls, ScktComp, Spin;
  8. type
  9. TWNDHacker = class(TForm)
  10. Panel1: TPanel;
  11. Label1: TLabel;
  12. HWNDEdit: TEdit;
  13. Label2: TLabel;
  14. Button1: TButton;
  15. Label3: TLabel;
  16. cname: TEdit;
  17. WNDEn: TCheckBox;
  18. WNDV: TCheckBox;
  19. Label4: TLabel;
  20. WNDTxt: TMemo;
  21. MainMenu1: TMainMenu;
  22. UpdateList1: TMenuItem;
  23. HWNDIcon: TPaintBox;
  24. GroupBox1: TGroupBox;
  25. ComboBox1: TComboBox;
  26. Label5: TLabel;
  27. Label6: TLabel;
  28. Edit1: TEdit;
  29. Label7: TLabel;
  30. Edit2: TEdit;
  31. Button2: TButton;
  32. CheckBox1: TCheckBox;
  33. Button3: TButton;
  34. Label8: TLabel;
  35. Memo1: TMemo;
  36. Label9: TLabel;
  37. Edit3: TEdit;
  38. Label10: TLabel;
  39. Edit4: TEdit;
  40. ListBox1: TListBox;
  41. Label11: TLabel;
  42. Edit5: TEdit;
  43. Label12: TLabel;
  44. Edit6: TEdit;
  45. GroupBox2: TGroupBox;
  46. Label13: TLabel;
  47. ComboBox2: TComboBox;
  48. CheckBox2: TCheckBox;
  49. Button4: TButton;
  50. Help1: TMenuItem;
  51. AboutWindowHacker1: TMenuItem;
  52. HWNDP: TComboBox;
  53. ComboBox3: TComboBox;
  54. Label14: TLabel;
  55. Tools1: TMenuItem;
  56. FindWindow1: TMenuItem;
  57. FindDialog1: TFindDialog;
  58. OpenDialog1: TOpenDialog;
  59. MouseFollower1: TMenuItem;
  60. Timer1: TTimer;
  61. StatusBar1: TStatusBar;
  62. ViewAtomTable1: TMenuItem;
  63. PopupMenu1: TPopupMenu;
  64. SaveIcon1: TMenuItem;
  65. LoadIcon1: TMenuItem;
  66. Cancel1: TMenuItem;
  67. SaveDialog1: TSaveDialog;
  68. RestoreWindow1: TMenuItem;
  69. ShowWindow1: TMenuItem;
  70. GetWindowLong1: TMenuItem;
  71. Label15: TLabel;
  72. SpinEdit1: TSpinEdit;
  73. Label16: TLabel;
  74. SpinEdit2: TSpinEdit;
  75. Label17: TLabel;
  76. SpinEdit3: TSpinEdit;
  77. SpinEdit4: TSpinEdit;
  78. Label18: TLabel;
  79. Button5: TButton;
  80. CheckBox3: TCheckBox;
  81. FindWindowEx1: TMenuItem;
  82. procedure UpdateList1Click(Sender: TObject);
  83. procedure ListBox1Click(Sender: TObject);
  84. procedure HWNDIconPaint(Sender: TObject);
  85. procedure FormCreate(Sender: TObject);
  86. procedure Button1Click(Sender: TObject);
  87. procedure Button2Click(Sender: TObject);
  88. procedure WNDVClick(Sender: TObject);
  89. procedure WNDEnClick(Sender: TObject);
  90. procedure Button3Click(Sender: TObject);
  91. procedure Button4Click(Sender: TObject);
  92. procedure Label12Click(Sender: TObject);
  93. procedure ComboBox2Change(Sender: TObject);
  94. procedure Label2Click(Sender: TObject);
  95. procedure AboutWindowHacker1Click(Sender: TObject);
  96. procedure FindDialog1Find(Sender: TObject);
  97. procedure FindWindow1Click(Sender: TObject);
  98. procedure MouseFollower1Click(Sender: TObject);
  99. procedure Timer1Timer(Sender: TObject);
  100. procedure ViewAtomTable1Click(Sender: TObject);
  101. procedure SaveIcon1Click(Sender: TObject);
  102. procedure HWNDIconClick(Sender: TObject);
  103. procedure RestoreWindow1Click(Sender: TObject);
  104. procedure LoadIcon1Click(Sender: TObject);
  105. procedure ShowWindow1Click(Sender: TObject);
  106. procedure GetWindowLong1Click(Sender: TObject);
  107. procedure Button5Click(Sender: TObject);
  108. procedure FindWindowEx1Click(Sender: TObject);
  109. private
  110. { Private declarations }
  111. public
  112. { Public declarations }
  113. end;
  114. { THWNDPPacket=record Reserved for Remote controllu
  115. op:integer;
  116. Handle:hwnd;
  117. classname,windowname:array[0..255]of ansichar;
  118. msg,startms,cms:dword;
  119. wparam,lparam:lparam;
  120. Return:LRESULT;
  121. end; }
  122. function GetConsoleWindow:hwnd;stdcall;external 'kernel32.dll';
  123. var
  124. WNDHacker: TWNDHacker;
  125. hico:hicon;
  126. nochange:boolean;
  127. searchres,msgs,winstyles,shows,gwl:tstringlist;
  128. childenum:tlist;
  129. implementation
  130. {$R *.DFM}
  131. uses wndhackunit2;
  132. function EnumHWND(hw:hwnd;lp:lparam):bool;stdcall;
  133. var cname,wtxt:array[0..1024] of char;
  134. pid:dword;
  135. begin
  136. getwindowtext(hw,wtxt,1025);
  137. getclassname(hw,cname,1025);
  138. result:=true;
  139. GEtWindowThreadProcessId(hw,@pid);
  140. if pid=getcurrentprocessid then exit;
  141. wndhacker.ListBox1.Items.AddObject(StrPas(CName)+','+strpas(wtxt),TObject(hw));
  142. wndhacker.HWNDP.Items.Add('$'+inttohex(hw,0));
  143. if lp=0 then
  144. enumchildwindows(hw,@enumhwnd,1);
  145. end;
  146. procedure TWNDHacker.UpdateList1Click(Sender: TObject);
  147. begin
  148. listbox1.Items.Clear;
  149. childenum.Clear;
  150. hwndp.Items.Clear;
  151. listbox1.Items.AddObject('HWND_DESKTOP',TObject(getdesktopwindow));
  152. enumwindows(@enumhwnd,0);
  153. end;
  154. procedure AddConsts(combo:tcombobox; slConsts:tstringlist);
  155. var i:integer;
  156. begin
  157. for i:=0 to slConsts.Count-1 do
  158. if StrToInt64Def(slconsts.values[slconsts.names[i]],-1)>-1 then
  159. combo.Items.Add(slConsts.names[i]);
  160. end;
  161. procedure TWNDHacker.ListBox1Click(Sender: TObject);
  162. var classname:array[0..255] of char;
  163. windowtxt:pchar;
  164. wtlen:integer;
  165. r:trect;
  166. dwprocess:dword;
  167. begin
  168. nochange:=true;
  169. HWNDEdit.Text:='$'+IntToHex(HWnd(listbox1.items.objects[listbox1.ItemIndex]),0);
  170. hwndp.Text:='$'+inttohex(getparent(hwnd(listbox1.items.objects[listbox1.ItemIndex])),0);
  171. hico:=GetClassLong(hwnd(ListBox1.items.objects[listbox1.itemindex]),GCL_HICON);
  172. if hico=0 then
  173. hico:=GetClassLong(getparent(hwnd(listbox1.items.objects[listbox1.itemindex])),
  174. gcl_hicon);
  175. if hico=0then hico:=loadicon(0,IDI_APPLICATION);
  176. drawicon(hwndicon.canvas.handle,0,0,hico);
  177. edit5.Text:='$'+inttohex(globalfindatom(classname),4);
  178. edit3.Text:=inttostr(GetWindowThreadProcessID(strtoint(hwndedit.text),
  179. @dwprocess));
  180. edit4.Text:=inttostr(dwprocess);
  181. edit6.Text:=IntTohex(getwindowlong(strtoint(hwndedit.text),gwl_style),8)+'-'+
  182. inttohex(getwindowlong(strtoint(hwndedit.text),gwl_exstyle),8);
  183. getclassname(hwnd(listbox1.items.objects[listbox1.itemindex]),classname,256);
  184. cname.Text:=strpas(classname);
  185. Wtlen:=GetWindowTextLength(hwnd(listbox1.items.objects[listbox1.itemindex]))+1;
  186. windowtxt:=stralloc(wtlen);
  187. GetWindowText(hwnd(listbox1.items.objects[listbox1.itemindex]),windowtxt,wtlen);
  188. wnden.Checked:= iswindowenabled(hwnd(listbox1.items.objects[listbox1.ItemIndex]));
  189. wndv.Checked:= iswindowvisible(hwnd(listbox1.items.objects[listbox1.itemindex]));
  190. wndtxt.Text:=strpas(windowtxt);
  191. strdispose(windowtxt);
  192. getwindowrect(strtoint(hwndedit.text),r);
  193. spinedit1.Value:=r.Bottom;
  194. spinedit2.Value:=r.Right;
  195. spinedit3.Value:=r.Top;
  196. spinedit4.Value:=r.Left;
  197. nochange:=false;
  198. end;
  199. procedure TWNDHacker.HWNDIconPaint(Sender: TObject);
  200. begin
  201. drawicon(HWNDIcon.Canvas.handle,0,0,hico);
  202. end;
  203. procedure TWNDHacker.FormCreate(Sender: TObject);
  204. var i:integer;
  205. msgr:tresourcestream;
  206. stylesr,showr,gwlr:tresourcestream;
  207. begin
  208. searchres:=tstringlist.Create;
  209. shows:=tstringlist.Create;
  210. showr:=tresourcestream.Create(hinstance,'SHOW','TXT');
  211. shows.LoadFromStream(showr);
  212. showr.Free;
  213. gwlr:=tresourcestream.Create(hinstance,'GWL','TXT');
  214. gwl:=tstringlist.Create;
  215. gwl.LoadFromStream(gwlr);
  216. gwlr.Free;
  217. childenum:=tlist.Create;
  218. combobox3.ItemIndex:=0;
  219. hico:=loadicon(0,IDI_APPLICATION);
  220. msgr:=tresourcestream.Create(hinstance,'MESSAGES','TXT');
  221. msgs:=tstringlist.Create;
  222. msgs.LoadFromStream(msgr);
  223. msgr.Free;
  224. stylesr:=tresourcestream.Create(hinstance,'WINSTYLES','TXT');
  225. winstyles:=tstringlist.Create;
  226. winstyles.LoadFromStream(stylesr);
  227. stylesr.Free;
  228. addconsts(combobox2,winstyles);
  229. for i:= 0 to msgs.Count-1 do
  230. if(msgs.Names[i]<>'') and(strscan(pchar(msgs[i]),'{')=nil) then
  231. combobox1.Items.Add(msgs.Names[i]);
  232. application.Title:=caption;
  233. UpdateList1.Click;
  234. end;
  235. procedure TWNDHacker.Button1Click(Sender: TObject);
  236. begin
  237. windows.SetParent(strtoint(hwndedit.text),strtoint(hwndp.text));
  238. end;
  239. procedure MyWndMsgProc(hw:hwnd;msg:uint;Startms:DWORD;lres:lresult);stdcall;
  240. begin
  241. wndhacker.Memo1.Lines.Add(IntToHex(hw,0)+' replied within '+inttostr(
  242. gettickcount-startms)+'ms, returned '+inttohex(lres,0));
  243. end;
  244. procedure TWNDHacker.Button2Click(Sender: TObject);
  245. var b:boolean;
  246. hw:hwnd;
  247. res:lresult;
  248. begin
  249. b:=true;
  250. res:=0;
  251. memo1.Clear;
  252. if not checkbox1.Checked then
  253. hw:=strtoint(hwndedit.text)else hw:=hwnd_broadcast;
  254. case combobox3.ItemIndex of
  255. 0:b:=sendmessagecallback(hw,strtointdef(msgs.values[combobox1.text],
  256. registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),
  257. strtoint(edit2.text),@mywndmsgproc,gettickcount);
  258. 1:b:=PostMessage(hw,strtointdef(msgs.values[combobox1.text],
  259. registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),
  260. strtoint(edit2.text));
  261. 2:res:=defwindowproc(hw,strtointdef(msgs.values[combobox1.text],
  262. registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),strtoint(
  263. edit2.text));
  264. 3:res:=sendmessage(hw,strtointdef(msgs.values[combobox1.text],
  265. registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),strtoint(
  266. edit2.text));
  267. end;
  268. if not b then
  269. messagebox(handle,pchar(syserrormessage(getlasterror)),'Window Hacker',mb_iconerror);
  270. if res<>0 then memo1.Text :='Returned with '+inttohex(res,0);
  271. end;
  272. procedure TWNDHacker.WNDVClick(Sender: TObject);
  273. begin
  274. if nochange then exit;
  275. if wndv.Checked then
  276. showwindow(strtoint(hwndedit.text),sw_show)else
  277. showwindow(strtoint(hwndedit.Text),sw_hide);
  278. end;
  279. procedure TWNDHacker.WNDEnClick(Sender: TObject);
  280. begin
  281. if nochange then exit;
  282. enablewindow(strtoint(hwndedit.text),wnden.checked);
  283. end;
  284. procedure TWNDHacker.Button3Click(Sender: TObject);
  285. begin
  286. setwindowtext(strtoint(hwndedit.text),pchar(wndtxt.text));
  287. end;
  288. procedure TWNDHacker.Button4Click(Sender: TObject);
  289. var hw:hwnd;
  290. x:integer;
  291. begin
  292. hw:=strtoint(hwndedit.text);
  293. if winstyles.Values[combobox2.Text]<>''then
  294. x:=Strtoint(winstyles.values[combobox2.text])else
  295. x:=strtoint(combobox2.text);
  296. if pos('_EX_',Uppercase(combobox2.text))>0 then
  297. begin
  298. if checkbox2.Checked then
  299. setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) or x)else
  300. setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) and(not x));
  301. end else begin
  302. if checkbox2.Checked then
  303. setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) or x)else
  304. setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) and(not x));
  305. end;
  306. end;
  307. procedure TWNDHacker.Label12Click(Sender: TObject);
  308. var s:string;
  309. I,x:integer;
  310. y:longint;
  311. begin
  312. s:='The window has the following styles set:'+#13#10;
  313. for i:=0to combobox2.Items.Count-1 do
  314. begin
  315. if pos('_EX_',combobox2.Items[i])>0 then
  316. x:= gwl_exstyle else x:=gwl_style;
  317. y:= strtoint(winstyles.values[ combobox2.items[i]]);
  318. if y and GetWindowLong(StrToInt(hwndedit.text),x)=y then
  319. s:=s+combobox2.Items[i]+#13#10;
  320. end;
  321. Messagebox(handle,pchar(s),'Window Hacker',0);
  322. end;
  323. procedure TWNDHacker.ComboBox2Change(Sender: TObject);
  324. var x:integer;
  325. begin
  326. if strtoint64def(Combobox2.text,-1)>-1 then
  327. x:=strtoint(combobox2.text) else
  328. if combobox2.Items.IndexOf(combobox2.text)>-1 then
  329. x:=strtoint(winstyles.values[combobox2.Text]);
  330. if pos('_EX_',Uppercase(combobox2.text))=0 then
  331. checkbox2.Checked:=(GetWindowLong(strtoint(hwndedit.Text),gwl_style) and x=x)else
  332. checkbox2.Checked:=(GetWindowLong(strtoint(hwndedit.Text),gwl_exstyle) and x=x);
  333. end;
  334. procedure TWNDHacker.Label2Click(Sender: TObject);
  335. var classn:array[0..1024]of char;
  336. wtxt:pchar;
  337. wtxtlen:integer;
  338. begin
  339. wtxtlen:=1+getwindowtextlength(strtoint(hwndp.Text));
  340. wtxt:=stralloc(wtxtlen);
  341. getwindowtext(strtoint(hwndp.text),wtxt,wtxtlen);
  342. getclassname(strtoint(hwndp.text),classn,1025);
  343. messagebox(handle,PChar('Window Text: '+strpas(wtxt)+#13#10+
  344. 'Class Name: '+strpas(classn)),
  345. 'Window Hacker',0);
  346. strdispose(wtxt);
  347. end;
  348. procedure TWNDHacker.AboutWindowHacker1Click(Sender: TObject);
  349. var hexe:thandle;
  350. compiletime:tfiletime;
  351. t:tdatetime;
  352. st:tsystemtime;
  353. begin
  354. hexe:=createfile(PChar(application.exename),generic_read,file_share_read or
  355. file_share_write,nil,open_existing,file_attribute_normal,0);
  356. getfiletime(hexe,nil,nil,@compiletime);
  357. closehandle(hexe);
  358. filetimetosystemtime(compiletime,st);
  359. t:=encodedate(st.wyear,st.wmonth,st.wday)+encodetime(st.whour,st.wminute,st.wsecond,0);
  360. messagebox(handle,pchar('Window Hacker v1.0 By Justin Roeder'+#13#10+
  361. 'Compiled on: '+DateTimeToStr(t))
  362. ,'About Window Hacker',0);
  363. end;
  364. procedure TWNDHacker.FindDialog1Find(Sender: TObject);
  365. var i:integer;
  366. q:string;
  367. begin
  368. allocconsole;
  369. findwindow1.enabled:=false;
  370. bringwindowtotop(getconsolewindow);
  371. finddialog1.CloseDialog;
  372. for i:=0 to listbox1.Items.Count-1 do
  373. if (pos(uppercase(finddialog1.findtext),uppercase(listbox1.items[i]))>0)or
  374. ('$'+inttohex(hwnd(listbox1.items.objects[i]),0)=uppercase(finddialog1.findtext))
  375. or ('$'+inttohex(getparent(hwnd(listbox1.items.objects[i])),0)=uppercase(
  376. finddialog1.findtext))then
  377. searchres.Add(listbox1.items[i]);
  378. if searchres.Count=0 then begin
  379. writeln('Nothing found, press enter to continue...');
  380. readln(q);
  381. findwindow1.Enabled:=true;
  382. freeconsole;
  383. exit;
  384. end;
  385. for i:=0 to searchres.Count-1 do
  386. writeln(i,'.',searchres[i]);
  387. write('Enter your choice or hit enter to cancel: ');
  388. readln(q);
  389. if q<>'' then begin
  390. listbox1.ItemIndex:=listbox1.Items.IndexOf(searchres[strtointdef(q,0)]);
  391. wndhacker.ListBox1Click(nil);
  392. end;
  393. findwindow1.Enabled:=true;
  394. freeconsole;
  395. end;
  396. procedure TWNDHacker.FindWindow1Click(Sender: TObject);
  397. begin
  398. finddialog1.Execute;
  399. end;
  400. procedure TWNDHacker.MouseFollower1Click(Sender: TObject);
  401. begin
  402. timer1.Enabled:=not timer1.Enabled;
  403. end;
  404. procedure TWNDHacker.Timer1Timer(Sender: TObject);
  405. var hw:hwnd;
  406. mouse:tpoint;
  407. desktopdc:hdc;
  408. s:String;
  409. cn,wtxt:array[0..255]of char;
  410. begin
  411. getcursorpos(mouse);
  412. hw:= windowfrompoint(mouse);
  413. if listbox1.Items.IndexOfObject(TObject(hw))>-1 then begin
  414. listbox1.ItemIndex:=listbox1.Items.IndexOfObject(tobject(hw));
  415. listbox1click(nil);
  416. end;
  417. desktopdc:=getwindowdc(getdesktopwindow);
  418. getclassname(hw,cn,256);
  419. GetWindowText(hw,wtxt,256);
  420. s:=Format('Classname:%s WindowText:%s Handle:%x Parent:%x',[cn,wtxt,hw,
  421. getparent(hw)]);
  422. textout(desktopdc,0,0,pchar(s),length(s));
  423. releasedc(getdesktopwindow,desktopdc);
  424. end;
  425. procedure TWNDHacker.ViewAtomTable1Click(Sender: TObject);
  426. var a:atom;
  427. aname:array[0..255]of char;
  428. hf:thandle;
  429. sherr,bwrite:dword;
  430. l:uint;
  431. s:String;
  432. cs:tstringlist;
  433. begin
  434. cs:=tstringlist.Create;
  435. hf:=CreateFile('ATOMTABL.CSV',generic_write,0,nil,create_always,
  436. file_attribute_normal,0);
  437. if hf=INVALID_HANDLE_VALUE then begin
  438. messagebox(handle,PChar(syserrormessage(getlasterror)),'Window Hacker(Create)',
  439. mb_iconerror);
  440. exit;
  441. end;
  442. s:='';
  443. for a:=1 to $FFFF do
  444. begin
  445. l:= globalgetatomname(a,aname,256);
  446. if l>0 then begin
  447. cs.Add('0x'+inttohex(a,4));
  448. cs.Add(aname);
  449. s:=cs.CommaText+#13#10;
  450. if not writefile(hf,s[1],length(s),bwrite,nil) then begin
  451. messagebox(handle,pchar(syserrormessage(getlasterror)),'Window Hacker(write)',
  452. mb_iconerror);
  453. exit;
  454. end;
  455. end;
  456. cs.Clear;
  457. end;
  458. closehandle(hf);
  459. cs.Free;
  460. sherr:=33;
  461. if shellexecute(0,nil,'ATOMTABL.CSV',nil,nil,sw_show)<33 then
  462. sherr:=shellexecute(0,nil,'notepad.exe','ATOMTABL.CSV',nil,sw_show);
  463. if sherr<33 then messagebox(handle,PChar(syserrormessage(sherr)),
  464. 'Window Hacker(shell)',mb_iconerror);
  465. end;
  466. procedure TWNDHacker.SaveIcon1Click(Sender: TObject);
  467. var ico:ticon;
  468. begin
  469. if not savedialog1.Execute then exit;
  470. ico:=ticon.Create;
  471. ico.Handle:=hico;
  472. ico.SaveToFile(savedialog1.filename);
  473. ico.Free;
  474. end;
  475. procedure TWNDHacker.HWNDIconClick(Sender: TObject);
  476. var poin:tpoint;
  477. begin
  478. getcursorpos(poin);
  479. restorewindow1.Enabled:=isiconic(strtoint(hwndedit.text));
  480. popupmenu1.Popup(poin.x,poin.y);
  481. end;
  482. procedure TWNDHacker.RestoreWindow1Click(Sender: TObject);
  483. begin
  484. showwindow(strtoint(hwndedit.text),sw_show);
  485. if not openicon(strtoint(hwndedit.text)) then
  486. messagebox(handle,pchar(syserrormessage(getlasterror)),'Window Hacker',
  487. mb_iconerror);
  488. end;
  489. procedure TWNDHacker.LoadIcon1Click(Sender: TObject);
  490. var hins:hinst;
  491. ind:dword;
  492. begin
  493. if not opendialog1.Execute then exit;
  494. ind:=StrTointdef(inputbox('Icon Index#','Enter Icon Index Number','0'),0);
  495. hins:=getclasslong(strtoint(hwndedit.text),GCL_HMODULE);
  496. setclasslong(strtoint(hwndedit.text),GCL_HICON,ExtractIcon(hins,pchar(
  497. opendialog1.FileName),ind));
  498. end;
  499. procedure TWNDHacker.ShowWindow1Click(Sender: TObject);
  500. var sw:integer;
  501. hw:hwnd;
  502. s:string;
  503. begin
  504. hw:=strtoint(hwndedit.text);
  505. s:=inputbox('ShowWindow','Enter SW_ Constant','SW_SHOWNA');
  506. if pos('SW_',uppercase(s))=1 then
  507. sw:=StrToInt(shows.values[s])else
  508. sw:=Strtointdef(s,sw_showna);
  509. showwindow(hw,sw);
  510. end;
  511. procedure TWNDHacker.GetWindowLong1Click(Sender: TObject);
  512. var ind:integer;
  513. hw:hwnd;
  514. s:string;
  515. begin
  516. hw:=strtoint(hwndedit.text);
  517. s:=InputBox('GetWindowLong','Enter GWL Constant:','GWL_STYLE');
  518. if strscan(pchar(s),'_')=nil then ind:=strtointdef(s,gwl_style) else
  519. ind:=strtoint(gwl.values[s]);
  520. s:=Format('Index %x equals %x',[ind,GetWindowLong(hw,ind)]);
  521. messagebox(handle,PChar(s),'Window Hacker',0);
  522. end;
  523. procedure TWNDHacker.Button5Click(Sender: TObject);
  524. begin
  525. setwindowpos(strtoint(hwndedit.text),0,spinedit3.value,spinedit4.value,
  526. spinedit2.Value,spinedit1.Value,swp_noactivate or
  527. (Byte(checkbox3.checked)*SWP_NOSENDCHANGING));
  528. end;
  529. procedure TWNDHacker.FindWindowEx1Click(Sender: TObject);
  530. begin
  531. findwndex.Visible:=true;
  532. findwndex.BringToFront;
  533. end;
  534. end.
unit wndhackUnit1;
{$RESOURCE wndhack32.res}
interface
//Main window unit
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, StdCtrls, ExtCtrls,shellapi, ComCtrls, ScktComp, Spin;

type
  TWNDHacker = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    HWNDEdit: TEdit;
    Label2: TLabel;
    Button1: TButton;
    Label3: TLabel;
    cname: TEdit;
    WNDEn: TCheckBox;
    WNDV: TCheckBox;
    Label4: TLabel;
    WNDTxt: TMemo;
    MainMenu1: TMainMenu;
    UpdateList1: TMenuItem;
    HWNDIcon: TPaintBox;
    GroupBox1: TGroupBox;
    ComboBox1: TComboBox;
    Label5: TLabel;
    Label6: TLabel;
    Edit1: TEdit;
    Label7: TLabel;
    Edit2: TEdit;
    Button2: TButton;
    CheckBox1: TCheckBox;
    Button3: TButton;
    Label8: TLabel;
    Memo1: TMemo;
    Label9: TLabel;
    Edit3: TEdit;
    Label10: TLabel;
    Edit4: TEdit;
    ListBox1: TListBox;
    Label11: TLabel;
    Edit5: TEdit;
    Label12: TLabel;
    Edit6: TEdit;
    GroupBox2: TGroupBox;
    Label13: TLabel;
    ComboBox2: TComboBox;
    CheckBox2: TCheckBox;
    Button4: TButton;
    Help1: TMenuItem;
    AboutWindowHacker1: TMenuItem;
    HWNDP: TComboBox;
    ComboBox3: TComboBox;
    Label14: TLabel;
    Tools1: TMenuItem;
    FindWindow1: TMenuItem;
    FindDialog1: TFindDialog;
    OpenDialog1: TOpenDialog;
    MouseFollower1: TMenuItem;
    Timer1: TTimer;
    StatusBar1: TStatusBar;
    ViewAtomTable1: TMenuItem;
    PopupMenu1: TPopupMenu;
    SaveIcon1: TMenuItem;
    LoadIcon1: TMenuItem;
    Cancel1: TMenuItem;
    SaveDialog1: TSaveDialog;
    RestoreWindow1: TMenuItem;
    ShowWindow1: TMenuItem;
    GetWindowLong1: TMenuItem;
    Label15: TLabel;
    SpinEdit1: TSpinEdit;
    Label16: TLabel;
    SpinEdit2: TSpinEdit;
    Label17: TLabel;
    SpinEdit3: TSpinEdit;
    SpinEdit4: TSpinEdit;
    Label18: TLabel;
    Button5: TButton;
    CheckBox3: TCheckBox;
    FindWindowEx1: TMenuItem;
    procedure UpdateList1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure HWNDIconPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure WNDVClick(Sender: TObject);
    procedure WNDEnClick(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Label12Click(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure Label2Click(Sender: TObject);
    procedure AboutWindowHacker1Click(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
    procedure FindWindow1Click(Sender: TObject);
    procedure MouseFollower1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ViewAtomTable1Click(Sender: TObject);
    procedure SaveIcon1Click(Sender: TObject);
    procedure HWNDIconClick(Sender: TObject);
    procedure RestoreWindow1Click(Sender: TObject);
    procedure LoadIcon1Click(Sender: TObject);
    procedure ShowWindow1Click(Sender: TObject);
    procedure GetWindowLong1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FindWindowEx1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
{  THWNDPPacket=record  Reserved for Remote controllu

  op:integer;
  Handle:hwnd;
  classname,windowname:array[0..255]of ansichar;
  msg,startms,cms:dword;
  wparam,lparam:lparam;
  Return:LRESULT;
  end;           }
  function GetConsoleWindow:hwnd;stdcall;external 'kernel32.dll';
var
  WNDHacker: TWNDHacker;
  hico:hicon;
  nochange:boolean;
  searchres,msgs,winstyles,shows,gwl:tstringlist;
  childenum:tlist;
implementation

{$R *.DFM}

uses wndhackunit2;

function EnumHWND(hw:hwnd;lp:lparam):bool;stdcall;
var cname,wtxt:array[0..1024] of char;
pid:dword;
begin
getwindowtext(hw,wtxt,1025);
getclassname(hw,cname,1025);
result:=true;
 GEtWindowThreadProcessId(hw,@pid);
 if pid=getcurrentprocessid then exit;
wndhacker.ListBox1.Items.AddObject(StrPas(CName)+','+strpas(wtxt),TObject(hw));
wndhacker.HWNDP.Items.Add('$'+inttohex(hw,0));
if lp=0 then
enumchildwindows(hw,@enumhwnd,1);
end;

procedure TWNDHacker.UpdateList1Click(Sender: TObject);
begin
listbox1.Items.Clear;
childenum.Clear;
hwndp.Items.Clear;
listbox1.Items.AddObject('HWND_DESKTOP',TObject(getdesktopwindow));
enumwindows(@enumhwnd,0);
end;

procedure AddConsts(combo:tcombobox; slConsts:tstringlist);
var i:integer;
begin
for i:=0 to slConsts.Count-1 do
if StrToInt64Def(slconsts.values[slconsts.names[i]],-1)>-1 then
combo.Items.Add(slConsts.names[i]);
end;

procedure TWNDHacker.ListBox1Click(Sender: TObject);
var classname:array[0..255] of char;
windowtxt:pchar;
wtlen:integer;
r:trect;
dwprocess:dword;
begin
nochange:=true;
HWNDEdit.Text:='$'+IntToHex(HWnd(listbox1.items.objects[listbox1.ItemIndex]),0);
hwndp.Text:='$'+inttohex(getparent(hwnd(listbox1.items.objects[listbox1.ItemIndex])),0);
hico:=GetClassLong(hwnd(ListBox1.items.objects[listbox1.itemindex]),GCL_HICON);
if hico=0 then
hico:=GetClassLong(getparent(hwnd(listbox1.items.objects[listbox1.itemindex])),
gcl_hicon);
if hico=0then hico:=loadicon(0,IDI_APPLICATION);
drawicon(hwndicon.canvas.handle,0,0,hico);
edit5.Text:='$'+inttohex(globalfindatom(classname),4);
edit3.Text:=inttostr(GetWindowThreadProcessID(strtoint(hwndedit.text),
@dwprocess));
edit4.Text:=inttostr(dwprocess);
edit6.Text:=IntTohex(getwindowlong(strtoint(hwndedit.text),gwl_style),8)+'-'+
inttohex(getwindowlong(strtoint(hwndedit.text),gwl_exstyle),8);
getclassname(hwnd(listbox1.items.objects[listbox1.itemindex]),classname,256);
cname.Text:=strpas(classname);
Wtlen:=GetWindowTextLength(hwnd(listbox1.items.objects[listbox1.itemindex]))+1;
windowtxt:=stralloc(wtlen);
GetWindowText(hwnd(listbox1.items.objects[listbox1.itemindex]),windowtxt,wtlen);
wnden.Checked:= iswindowenabled(hwnd(listbox1.items.objects[listbox1.ItemIndex]));
wndv.Checked:= iswindowvisible(hwnd(listbox1.items.objects[listbox1.itemindex]));
wndtxt.Text:=strpas(windowtxt);
strdispose(windowtxt);
getwindowrect(strtoint(hwndedit.text),r);
spinedit1.Value:=r.Bottom;
spinedit2.Value:=r.Right;
spinedit3.Value:=r.Top;
spinedit4.Value:=r.Left;
nochange:=false;
end;

procedure TWNDHacker.HWNDIconPaint(Sender: TObject);
begin
drawicon(HWNDIcon.Canvas.handle,0,0,hico);
end;

procedure TWNDHacker.FormCreate(Sender: TObject);
var i:integer;
msgr:tresourcestream;
stylesr,showr,gwlr:tresourcestream;
begin
searchres:=tstringlist.Create;
shows:=tstringlist.Create;
showr:=tresourcestream.Create(hinstance,'SHOW','TXT');
shows.LoadFromStream(showr);
showr.Free;
gwlr:=tresourcestream.Create(hinstance,'GWL','TXT');
gwl:=tstringlist.Create;
gwl.LoadFromStream(gwlr);
gwlr.Free;
childenum:=tlist.Create;
combobox3.ItemIndex:=0;
hico:=loadicon(0,IDI_APPLICATION);
msgr:=tresourcestream.Create(hinstance,'MESSAGES','TXT');
msgs:=tstringlist.Create;
msgs.LoadFromStream(msgr);
msgr.Free;
stylesr:=tresourcestream.Create(hinstance,'WINSTYLES','TXT');
winstyles:=tstringlist.Create;
winstyles.LoadFromStream(stylesr);
stylesr.Free;
addconsts(combobox2,winstyles);
for i:= 0 to msgs.Count-1 do
if(msgs.Names[i]<>'') and(strscan(pchar(msgs[i]),'{')=nil) then
combobox1.Items.Add(msgs.Names[i]);
application.Title:=caption;
UpdateList1.Click;
end;

procedure TWNDHacker.Button1Click(Sender: TObject);
begin
windows.SetParent(strtoint(hwndedit.text),strtoint(hwndp.text));
end;

procedure MyWndMsgProc(hw:hwnd;msg:uint;Startms:DWORD;lres:lresult);stdcall;
begin
wndhacker.Memo1.Lines.Add(IntToHex(hw,0)+' replied within '+inttostr(
gettickcount-startms)+'ms, returned '+inttohex(lres,0));
end;

procedure TWNDHacker.Button2Click(Sender: TObject);
var b:boolean;
hw:hwnd;
res:lresult;
begin
b:=true;
res:=0;
memo1.Clear;
if not checkbox1.Checked then
hw:=strtoint(hwndedit.text)else hw:=hwnd_broadcast;
case combobox3.ItemIndex of
0:b:=sendmessagecallback(hw,strtointdef(msgs.values[combobox1.text],
registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),
strtoint(edit2.text),@mywndmsgproc,gettickcount);
1:b:=PostMessage(hw,strtointdef(msgs.values[combobox1.text],
registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),
strtoint(edit2.text));
2:res:=defwindowproc(hw,strtointdef(msgs.values[combobox1.text],
registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),strtoint(
edit2.text));
3:res:=sendmessage(hw,strtointdef(msgs.values[combobox1.text],
registerwindowmessage(pchar(combobox1.text))),strtoint(edit1.text),strtoint(
edit2.text));
end;
if not b then
messagebox(handle,pchar(syserrormessage(getlasterror)),'Window Hacker',mb_iconerror);
if res<>0 then memo1.Text :='Returned with '+inttohex(res,0);
end;

procedure TWNDHacker.WNDVClick(Sender: TObject);
begin
if nochange then exit;
if wndv.Checked then
showwindow(strtoint(hwndedit.text),sw_show)else
showwindow(strtoint(hwndedit.Text),sw_hide);

end;

procedure TWNDHacker.WNDEnClick(Sender: TObject);
begin
if nochange then exit;
enablewindow(strtoint(hwndedit.text),wnden.checked);

end;

procedure TWNDHacker.Button3Click(Sender: TObject);
begin
setwindowtext(strtoint(hwndedit.text),pchar(wndtxt.text));
end;

procedure TWNDHacker.Button4Click(Sender: TObject);
var hw:hwnd;
x:integer;
begin
hw:=strtoint(hwndedit.text);
if winstyles.Values[combobox2.Text]<>''then
x:=Strtoint(winstyles.values[combobox2.text])else
x:=strtoint(combobox2.text);
if pos('_EX_',Uppercase(combobox2.text))>0 then
begin
if checkbox2.Checked then
setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) or x)else
setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) and(not x));
end else begin
if checkbox2.Checked then
setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) or x)else
setwindowlong(hw,gwl_exstyle,getwindowlong(hw,gwl_exstyle) and(not x));
end;
end;

procedure TWNDHacker.Label12Click(Sender: TObject);
var s:string;
I,x:integer;
y:longint;
begin
s:='The window has the following styles set:'+#13#10;
for i:=0to combobox2.Items.Count-1 do
begin
if pos('_EX_',combobox2.Items[i])>0 then
x:= gwl_exstyle else x:=gwl_style;
y:= strtoint(winstyles.values[ combobox2.items[i]]);
if y and GetWindowLong(StrToInt(hwndedit.text),x)=y then
s:=s+combobox2.Items[i]+#13#10;
end;
Messagebox(handle,pchar(s),'Window Hacker',0);
end;

procedure TWNDHacker.ComboBox2Change(Sender: TObject);
var x:integer;
begin
if strtoint64def(Combobox2.text,-1)>-1 then
x:=strtoint(combobox2.text) else
if combobox2.Items.IndexOf(combobox2.text)>-1 then
x:=strtoint(winstyles.values[combobox2.Text]);
if pos('_EX_',Uppercase(combobox2.text))=0 then
checkbox2.Checked:=(GetWindowLong(strtoint(hwndedit.Text),gwl_style) and x=x)else
checkbox2.Checked:=(GetWindowLong(strtoint(hwndedit.Text),gwl_exstyle) and x=x);
end;

procedure TWNDHacker.Label2Click(Sender: TObject);
var classn:array[0..1024]of char;
wtxt:pchar;
wtxtlen:integer;
begin
wtxtlen:=1+getwindowtextlength(strtoint(hwndp.Text));
wtxt:=stralloc(wtxtlen);
getwindowtext(strtoint(hwndp.text),wtxt,wtxtlen);
getclassname(strtoint(hwndp.text),classn,1025);
messagebox(handle,PChar('Window Text: '+strpas(wtxt)+#13#10+
                        'Class Name: '+strpas(classn)),
'Window Hacker',0);
strdispose(wtxt);
end;

procedure TWNDHacker.AboutWindowHacker1Click(Sender: TObject);
var hexe:thandle;
compiletime:tfiletime;
t:tdatetime;
st:tsystemtime;
begin
hexe:=createfile(PChar(application.exename),generic_read,file_share_read or
file_share_write,nil,open_existing,file_attribute_normal,0);
getfiletime(hexe,nil,nil,@compiletime);
closehandle(hexe);
filetimetosystemtime(compiletime,st);
t:=encodedate(st.wyear,st.wmonth,st.wday)+encodetime(st.whour,st.wminute,st.wsecond,0);
messagebox(handle,pchar('Window Hacker v1.0 By Justin Roeder'+#13#10+
                        'Compiled on: '+DateTimeToStr(t))
,'About Window Hacker',0);
end;

procedure TWNDHacker.FindDialog1Find(Sender: TObject);
var i:integer;
q:string;
begin
allocconsole;
findwindow1.enabled:=false;
bringwindowtotop(getconsolewindow);
finddialog1.CloseDialog;
for i:=0 to listbox1.Items.Count-1 do
if (pos(uppercase(finddialog1.findtext),uppercase(listbox1.items[i]))>0)or
('$'+inttohex(hwnd(listbox1.items.objects[i]),0)=uppercase(finddialog1.findtext))
or ('$'+inttohex(getparent(hwnd(listbox1.items.objects[i])),0)=uppercase(
finddialog1.findtext))then
searchres.Add(listbox1.items[i]);
if searchres.Count=0 then begin
writeln('Nothing found, press enter to continue...');
readln(q);
findwindow1.Enabled:=true;
freeconsole;
exit;
end;
for i:=0 to searchres.Count-1 do
writeln(i,'.',searchres[i]);
write('Enter your choice or hit enter to cancel: ');
readln(q);
if q<>'' then begin
listbox1.ItemIndex:=listbox1.Items.IndexOf(searchres[strtointdef(q,0)]);
wndhacker.ListBox1Click(nil);
end;
findwindow1.Enabled:=true;
freeconsole;
end;

procedure TWNDHacker.FindWindow1Click(Sender: TObject);
begin
finddialog1.Execute;
end;

procedure TWNDHacker.MouseFollower1Click(Sender: TObject);
begin
timer1.Enabled:=not timer1.Enabled;
end;

procedure TWNDHacker.Timer1Timer(Sender: TObject);
var hw:hwnd;
mouse:tpoint;
desktopdc:hdc;
s:String;
cn,wtxt:array[0..255]of char;
begin
getcursorpos(mouse);
hw:= windowfrompoint(mouse);
if listbox1.Items.IndexOfObject(TObject(hw))>-1 then begin
listbox1.ItemIndex:=listbox1.Items.IndexOfObject(tobject(hw));
listbox1click(nil);
end;
desktopdc:=getwindowdc(getdesktopwindow);
getclassname(hw,cn,256);
GetWindowText(hw,wtxt,256);
s:=Format('Classname:%s WindowText:%s Handle:%x Parent:%x',[cn,wtxt,hw,
getparent(hw)]);
textout(desktopdc,0,0,pchar(s),length(s));
releasedc(getdesktopwindow,desktopdc);
end;

procedure TWNDHacker.ViewAtomTable1Click(Sender: TObject);
var a:atom;
aname:array[0..255]of char;
hf:thandle;
sherr,bwrite:dword;
l:uint;
s:String;
cs:tstringlist;
begin
cs:=tstringlist.Create;
hf:=CreateFile('ATOMTABL.CSV',generic_write,0,nil,create_always,
file_attribute_normal,0);
if hf=INVALID_HANDLE_VALUE then begin
messagebox(handle,PChar(syserrormessage(getlasterror)),'Window Hacker(Create)',
mb_iconerror);
exit;
end;
s:='';
for a:=1 to $FFFF do
begin
l:= globalgetatomname(a,aname,256);
if l>0 then begin
cs.Add('0x'+inttohex(a,4));
cs.Add(aname);
s:=cs.CommaText+#13#10;
if not writefile(hf,s[1],length(s),bwrite,nil) then begin
messagebox(handle,pchar(syserrormessage(getlasterror)),'Window Hacker(write)',
mb_iconerror);
exit;
end;
end;
cs.Clear;
end;
closehandle(hf);
cs.Free;
sherr:=33;
if shellexecute(0,nil,'ATOMTABL.CSV',nil,nil,sw_show)<33 then
sherr:=shellexecute(0,nil,'notepad.exe','ATOMTABL.CSV',nil,sw_show);
if sherr<33 then messagebox(handle,PChar(syserrormessage(sherr)),
'Window Hacker(shell)',mb_iconerror);
end;

procedure TWNDHacker.SaveIcon1Click(Sender: TObject);
var ico:ticon;
begin
if not savedialog1.Execute then exit;
ico:=ticon.Create;
ico.Handle:=hico;
ico.SaveToFile(savedialog1.filename);
ico.Free;
end;

procedure TWNDHacker.HWNDIconClick(Sender: TObject);
var poin:tpoint;
begin
getcursorpos(poin);
restorewindow1.Enabled:=isiconic(strtoint(hwndedit.text));
popupmenu1.Popup(poin.x,poin.y);
end;

procedure TWNDHacker.RestoreWindow1Click(Sender: TObject);
begin
showwindow(strtoint(hwndedit.text),sw_show);
if not openicon(strtoint(hwndedit.text)) then
messagebox(handle,pchar(syserrormessage(getlasterror)),'Window Hacker',
mb_iconerror);

end;

procedure TWNDHacker.LoadIcon1Click(Sender: TObject);
var hins:hinst;
ind:dword;
begin
if not opendialog1.Execute then exit;
ind:=StrTointdef(inputbox('Icon Index#','Enter Icon Index Number','0'),0);
hins:=getclasslong(strtoint(hwndedit.text),GCL_HMODULE);
setclasslong(strtoint(hwndedit.text),GCL_HICON,ExtractIcon(hins,pchar(
opendialog1.FileName),ind));
end;

procedure TWNDHacker.ShowWindow1Click(Sender: TObject);
var sw:integer;
hw:hwnd;
s:string;
begin
hw:=strtoint(hwndedit.text);
s:=inputbox('ShowWindow','Enter SW_ Constant','SW_SHOWNA');
if pos('SW_',uppercase(s))=1 then
sw:=StrToInt(shows.values[s])else
sw:=Strtointdef(s,sw_showna);
showwindow(hw,sw);
end;

procedure TWNDHacker.GetWindowLong1Click(Sender: TObject);
var ind:integer;
hw:hwnd;
s:string;
begin
hw:=strtoint(hwndedit.text);
s:=InputBox('GetWindowLong','Enter GWL Constant:','GWL_STYLE');
if strscan(pchar(s),'_')=nil then ind:=strtointdef(s,gwl_style) else
ind:=strtoint(gwl.values[s]);
s:=Format('Index %x equals %x',[ind,GetWindowLong(hw,ind)]);
messagebox(handle,PChar(s),'Window Hacker',0);
end;

procedure TWNDHacker.Button5Click(Sender: TObject);
begin
setwindowpos(strtoint(hwndedit.text),0,spinedit3.value,spinedit4.value,
spinedit2.Value,spinedit1.Value,swp_noactivate or
(Byte(checkbox3.checked)*SWP_NOSENDCHANGING));
end;

procedure TWNDHacker.FindWindowEx1Click(Sender: TObject);
begin
findwndex.Visible:=true;
findwndex.BringToFront;
end;

end.
  1. unit wndhackunit2;
  2. //Find Window Unit
  3. interface
  4. uses
  5. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  6. StdCtrls;
  7. type
  8. TFindWNDEx = class(TForm)
  9. Label1: TLabel;
  10. Edit1: TEdit;
  11. Label2: TLabel;
  12. Memo1: TMemo;
  13. Button1: TButton;
  14. Button2: TButton;
  15. Label3: TLabel;
  16. Edit2: TEdit;
  17. Button3: TButton;
  18. CheckBox1: TCheckBox;
  19. procedure Button1Click(Sender: TObject);
  20. procedure Button3Click(Sender: TObject);
  21. private
  22. { Private declarations }
  23. public
  24. { Public declarations }
  25. end;
  26. var
  27. FindWNDEx: TFindWNDEx;
  28. childaf:hwnd;
  29. implementation
  30. {$R *.DFM}
  31. uses wndhackunit1;
  32. procedure TFindWNDEx.Button1Click(Sender: TObject);
  33. var hw:hwnd;
  34. begin
  35. if checkbox1.Checked then childaf:=0;
  36. if memo1.Text='' then
  37. hw:=findwindowex(strtointdef(edit2.text,0),childaf,pchar(edit1.text),nil)else
  38. hw:=findwindowex(strtointdef(edit2.text,0),childaf,pchar(edit1.text),pchar(
  39. memo1.text));
  40. childaf:=hw;
  41. checkbox1.Checked:=false;
  42. if hw=0 then exit;
  43. if wndhacker.ListBox1.Items.IndexOfObject(tobject(hw))=-1 then
  44. wndhacker.UpdateList1.Click;
  45. wndhacker.ListBox1.ItemIndex:=wndhacker.ListBox1.Items.IndexOfObject(tobject(hw));
  46. wndhacker.ListBox1Click(nil);
  47. end;
  48. procedure TFindWNDEx.Button3Click(Sender: TObject);
  49. begin
  50. edit2.text:=wndhacker.HWNDEdit.Text
  51. end;
  52. end.
unit wndhackunit2;
//Find Window Unit
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TFindWNDEx = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Label3: TLabel;
    Edit2: TEdit;
    Button3: TButton;
    CheckBox1: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FindWNDEx: TFindWNDEx;
childaf:hwnd;
implementation

{$R *.DFM}

uses wndhackunit1;

procedure TFindWNDEx.Button1Click(Sender: TObject);
var hw:hwnd;
begin
if checkbox1.Checked then childaf:=0;
if memo1.Text='' then
hw:=findwindowex(strtointdef(edit2.text,0),childaf,pchar(edit1.text),nil)else
hw:=findwindowex(strtointdef(edit2.text,0),childaf,pchar(edit1.text),pchar(
memo1.text));
childaf:=hw;
checkbox1.Checked:=false;
if hw=0 then exit;
if wndhacker.ListBox1.Items.IndexOfObject(tobject(hw))=-1 then
wndhacker.UpdateList1.Click;
wndhacker.ListBox1.ItemIndex:=wndhacker.ListBox1.Items.IndexOfObject(tobject(hw));
wndhacker.ListBox1Click(nil);
end;

procedure TFindWNDEx.Button3Click(Sender: TObject);
begin
edit2.text:=wndhacker.HWNDEdit.Text
end;

end.
  1. library libwndhack;
  2. //API Library for Window Hacker
  3. uses
  4. SysUtils,windows,messages,
  5. Classes;
  6. {$RESOURCE wndhackdll.res}
  7. type THWNDCommand=record
  8. Opcode:byte;
  9. etc,ret,found:integer;
  10. hwnds:tlist;
  11. query:pchar;
  12. end;
  13. PHWNDCommand=^THWNDCommand;
  14. function GetConsoleWindow:HWND;stdcall;external 'kernel32.dll';
  15. var lasterr:pchar=nil;
  16. def_cmd:thwndcommand;
  17. dc:hdc;
  18. function WNDGetLastError:pchar;stdcall;
  19. begin
  20. result:=lasterr;
  21. end;
  22. function MyWNDEnum(hw:hwnd;var lp:thwndcommand):bool;stdcall;
  23. var wtxt,cn:array[0..255]of char;
  24. begin
  25. getclassname(hw,cn,256);
  26. getwindowtext(hw,wtxt,256);
  27. result:=true;
  28. if (strpos(cn,lp.query)<>nil)or(strpos(wtxt,lp.query)<>nil)then begin
  29. lp.found:=lp.found+1;
  30. case lp.Opcode of
  31. 1:lp.ret:= Integer(ShowWindow(hw,lp.etc));
  32. 2:lp.ret:= integer(EnableWindow(hw,(lp.etc=1)));
  33. 3:lp.ret:= sendmessage(hw,bm_Click,0,0 );
  34. 4:lp.ret:=sendmessage(hw,wm_destroy,0,0);
  35. 5:lp.ret:=sendmessage(hw,wm_close,0,0);
  36. 6:lp.ret:=setparent(hw,lp.etc);
  37. end;
  38. lp.hwnds.Add(Pointer(hw));
  39. end;
  40. if not enumchildwindows(hw,@mywndenum,integer(@lp))then
  41. lasterr:='EnumChildWindows failed';
  42. end;
  43. function ShowHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;nshow:integer):POINTER;stdcall;
  44. var cmd:phwndcommand;
  45. begin
  46. new(cmd);
  47. cmd.query:=lpquery;
  48. cmd.found:=0;
  49. cmd.Opcode:=1;
  50. cmd.etc:=nshow;
  51. cmd.hwnds:=tlist.Create;
  52. if not enumwindows(@mywndenum,Integer(cmd))then
  53. if reserved>0 then begin
  54. messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
  55. exitprocess(0);
  56. end else
  57. lasterr:='EnumWindows failed';
  58. if reserved>0 then exitprocess(cmd.found);
  59. result:=cmd;
  60. end;
  61. function ClickButton(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
  62. nshow:integer):POINTER;stdcall;
  63. var cmd:phwndcommand;
  64. begin
  65. new(cmd);
  66. cmd.query:=lpquery;
  67. cmd.found:=0;
  68. cmd.Opcode:=3;
  69. cmd.etc:=0;
  70. cmd.hwnds:=tlist.Create;
  71. if not enumwindows(@mywndenum,Integer(cmd))then
  72. if reserved>0 then begin
  73. messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
  74. exitprocess(0);
  75. end else
  76. lasterr:='EnumWindows failed';
  77. if reserved>0 then exitprocess(cmd.found);
  78. result:=cmd;
  79. end;
  80. function GetFoundWindowCount(var lpHWNDCMD:THWNDCommand):integer;stdcall;
  81. begin
  82. result:=lphwndcmd.found;
  83. end;
  84. function GetWNDReturnValue(var lpWND:THWNDCommand):integer;stdcall;
  85. begin
  86. result:=lpWND.ret;
  87. end;
  88. function HWNDPop(lpWND:pHWNDCommand):hwnd;stdcall;
  89. begin
  90. result:=0;
  91. try
  92. result:=hwnd(lpwnd.hwnds[0]);
  93. lpwnd.hwnds.Delete(0);
  94. except on e:exception do lasterr:=PChar(e.message);
  95. end;
  96. end;
  97. procedure WNDHackFree(p:phwndcommand);stdcall;
  98. begin
  99. if p.hwnds<>nil then p.hwnds.Free;
  100. dispose(p);
  101. end;
  102. procedure WNDResetError;stdcall;
  103. begin
  104. lasterr:=nil;
  105. end;
  106. function DestroyHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
  107. nshow:integer):POINTER;stdcall;
  108. var cmd:phwndcommand;
  109. begin
  110. new(cmd);
  111. cmd.query:=lpquery;
  112. cmd.found:=0;
  113. cmd.Opcode:=4;
  114. cmd.hwnds:=tlist.Create;
  115. if not enumwindows(@mywndenum,Integer(cmd))then
  116. if reserved>0 then begin
  117. messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
  118. exitprocess(0);
  119. end else
  120. lasterr:='EnumWindows failed';
  121. if reserved>0 then exitprocess(cmd.found);
  122. result:=cmd;
  123. end;
  124. function CloseHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
  125. nshow:integer):POINTER;stdcall;
  126. var cmd:phwndcommand;
  127. begin
  128. new(cmd);
  129. cmd.query:=lpquery;
  130. cmd.found:=0;
  131. cmd.Opcode:=5;
  132. cmd.hwnds:=tlist.Create;
  133. if not enumwindows(@mywndenum,Integer(cmd))then
  134. if reserved>0 then begin
  135. messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
  136. exitprocess(0);
  137. end else
  138. lasterr:='EnumWindows failed';
  139. if reserved>0 then exitprocess(cmd.found);
  140. result:=cmd;
  141. end;
  142. procedure ScreenSaverBox(hwn:hwnd;inst:hinst;lpscrfile:pchar;nshow:integer);stdcall;
  143. begin
  144. allocconsole;
  145. setconsoletitle(lpscrfile);
  146. if winexec(pchar(strpas(lpscrfile)+' /P '+inttostr(getconsolewindow)),sw_show)>31
  147. then while true do asm NOP end;
  148. MessageBox(hwn,'Error opening screensaver','Window Hacker',mb_iconerror);
  149. end;
  150. function CreateBox(shw:hwnd;resered:dword;lpQuery:PCHAR;nshow:integer):bool;stdcall;
  151. var cmd:phwndcommand;
  152. hw:hwnd;
  153. i:integer;
  154. S,q:string;
  155. begin
  156. result:=allocconsole;
  157. setconsoletitle('WNDHackerBox');
  158. setclasslong(getconsolewindow,gcl_hicon,loadicon(getmodulehandle('libwndhack.dll'),
  159. 'WNDMAN'));
  160. writeln('Box for ',lpquery);
  161. writeln('Box handle is $',inttohex(getconsolewindow,0));
  162. new(cmd);
  163. cmd.Opcode:=6;
  164. cmd.etc:= Integer(Getconsolewindow);
  165. cmd.found:=0;
  166. cmd.query:=lpquery;
  167. cmd.hwnds:=tlist.Create;
  168. enumwindows(@mywndenum,Integer(cmd));
  169. writeln(cmd.found,' windows has joined this box');
  170. hw:=HWNDPop(cmd);
  171. while hw<>0 do begin
  172. writeln('Window Handle $',inttohex(hw,0),' has joined this box');hw:=hwndpop(cmd);
  173. end;
  174. while true do begin
  175. write('WNDHack>');
  176. readln(s);
  177. s:=trim(s);
  178. if Uppercase(s)='HELP' then begin
  179. writeln('Commands Avaliable:');
  180. writeln('ADD searches for a window objects and adds them to this box');
  181. writeln('CLOSE Sends WM_CLOSE message to all window objects that are apart of this box');
  182. end;
  183. if uppercase(s)='ADD' then begin
  184. write('WindowName/Classname:');
  185. readln(q);
  186. cmd.query:=PChar(q);
  187. enumwindows(@mywndenum,Integer(cmd));
  188. end;
  189. if Uppercase(s)='CLOSE' then
  190. for i:= 0 to cmd.hwnds.count-1do
  191. sendmessage(HWND(CMD.hwnds[i]),wm_close,0,0);
  192. end;
  193. end;
  194. function EnableHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
  195. nshow:integer):POINTER;stdcall;
  196. var cmd:phwndcommand;
  197. begin
  198. new(cmd);
  199. cmd.query:=lpquery;
  200. cmd.found:=0;
  201. cmd.Opcode:=2;
  202. cmd.etc:=1;
  203. cmd.hwnds:=tlist.Create;
  204. if not enumwindows(@mywndenum,Integer(cmd))then
  205. if reserved>0 then begin
  206. messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
  207. exitprocess(0);
  208. end else
  209. lasterr:='EnumWindows failed';
  210. if reserved>0 then exitprocess(cmd.found);
  211. result:=cmd;
  212. end;
  213. function DisableHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
  214. nshow:integer):POINTER;stdcall;
  215. var cmd:phwndcommand;
  216. begin
  217. new(cmd);
  218. cmd.query:=lpquery;
  219. cmd.found:=0;
  220. cmd.Opcode:=2;
  221. cmd.etc:=0;
  222. cmd.hwnds:=tlist.Create;
  223. if not enumwindows(@mywndenum,Integer(cmd))then
  224. if reserved>0 then begin
  225. messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
  226. exitprocess(0);
  227. end else
  228. lasterr:='EnumWindows failed';
  229. if reserved>0 then exitprocess(cmd.found);
  230. result:=cmd;
  231. end;
  232. function WindowSearch(lpQuery:pchar):phwndcommand;stdcall;
  233. begin
  234. new(result);
  235. result.Opcode:=0;
  236. result.hwnds:=tlist.Create;
  237. result.found:=0;
  238. if not enumwindows(@mywndenum,integer(result)) then
  239. lasterr:='EnumWindows failed';
  240. end;
  241. function ChangeParent(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
  242. nshow:integer):POINTER;stdcall;
  243. var cmd:phwndcommand;
  244. sl:tstringlist;
  245. begin
  246. sl:=tstringlist.Create;
  247. sl.CommaText:=strpas(lpQuery);
  248. new(cmd);
  249. cmd.query:=PChar(sl[0]);
  250. cmd.found:=0;
  251. cmd.Opcode:=6;
  252. cmd.etc:=strtointdef(sl[1],getdesktopwindow);
  253. cmd.hwnds:=tlist.Create;
  254. sl.Free;
  255. if not enumwindows(@mywndenum,Integer(cmd))then
  256. if reserved>0 then begin
  257. messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
  258. exitprocess(0);
  259. end else
  260. lasterr:='EnumWindows failed';
  261. if reserved>0 then exitprocess(cmd.found);
  262. result:=cmd;
  263. end;
  264. function WNDHackSize(var wnddata:thwndcommand):integer;stdcall;
  265. begin
  266. result:=sizeof(wnddata);
  267. end;
  268. procedure QueryFirstWindow(hw:hwnd;inst:hinst;lpQuery:pchar;nShow:integer);stdcall;
  269. var cmd:phwndcommand;
  270. begin
  271. new(cmd);
  272. cmd.Opcode:=0;
  273. cmd.query:=lpquery;
  274. cmd.found:=0;
  275. cmd.hwnds:=tlist.Create;
  276. enumwindows(@mywndenum,integer(cmd));
  277. if cmd.found=0 then exitprocess(0);
  278. exitprocess(hwndpop(cmd));
  279. end;
  280. exports WNDGetLastError,ShowHWND,HWNDPop,WNDHackFree,GetWNDReturnValue,CreateBox,
  281. GetFoundWindowCount,WNDResetError,ClickButton,CloseHWND,DestroyHWND,DisableHWND,
  282. EnableHWND,WindowSearch,ChangeParent,WNDHackSize,QueryFirstWindow,ScreenSaverBox;
  283. begin
  284. end.
library libwndhack;
//API Library for Window Hacker
uses
  SysUtils,windows,messages,
  Classes;
{$RESOURCE wndhackdll.res}

type THWNDCommand=record
Opcode:byte;
etc,ret,found:integer;
hwnds:tlist;
query:pchar;
end;
PHWNDCommand=^THWNDCommand;
function GetConsoleWindow:HWND;stdcall;external 'kernel32.dll';
var lasterr:pchar=nil;
def_cmd:thwndcommand;
dc:hdc;

function WNDGetLastError:pchar;stdcall;
begin
result:=lasterr;
end;

function MyWNDEnum(hw:hwnd;var lp:thwndcommand):bool;stdcall;
var wtxt,cn:array[0..255]of char;
begin
getclassname(hw,cn,256);
getwindowtext(hw,wtxt,256);
result:=true;
if (strpos(cn,lp.query)<>nil)or(strpos(wtxt,lp.query)<>nil)then begin
lp.found:=lp.found+1;
case lp.Opcode of
1:lp.ret:= Integer(ShowWindow(hw,lp.etc));
2:lp.ret:= integer(EnableWindow(hw,(lp.etc=1)));
3:lp.ret:= sendmessage(hw,bm_Click,0,0 );
4:lp.ret:=sendmessage(hw,wm_destroy,0,0);
5:lp.ret:=sendmessage(hw,wm_close,0,0);
6:lp.ret:=setparent(hw,lp.etc);
end;
lp.hwnds.Add(Pointer(hw));
end;
if not enumchildwindows(hw,@mywndenum,integer(@lp))then
lasterr:='EnumChildWindows failed';
end;

function ShowHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;nshow:integer):POINTER;stdcall;
var cmd:phwndcommand;
begin
new(cmd);
cmd.query:=lpquery;
cmd.found:=0;
cmd.Opcode:=1;
cmd.etc:=nshow;
cmd.hwnds:=tlist.Create;
if not enumwindows(@mywndenum,Integer(cmd))then
if reserved>0 then begin
messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
exitprocess(0);
end else
lasterr:='EnumWindows failed';
if reserved>0 then exitprocess(cmd.found);
result:=cmd;
end;

function ClickButton(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
nshow:integer):POINTER;stdcall;
var cmd:phwndcommand;
begin
new(cmd);
cmd.query:=lpquery;
cmd.found:=0;
cmd.Opcode:=3;
cmd.etc:=0;
cmd.hwnds:=tlist.Create;
if not enumwindows(@mywndenum,Integer(cmd))then
if reserved>0 then begin
messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
exitprocess(0);
end else
lasterr:='EnumWindows failed';
if reserved>0 then exitprocess(cmd.found);
result:=cmd;
end;

function GetFoundWindowCount(var lpHWNDCMD:THWNDCommand):integer;stdcall;
begin
result:=lphwndcmd.found;
end;

function GetWNDReturnValue(var lpWND:THWNDCommand):integer;stdcall;
begin
result:=lpWND.ret;
end;

function HWNDPop(lpWND:pHWNDCommand):hwnd;stdcall;
begin
result:=0;
try
result:=hwnd(lpwnd.hwnds[0]);
lpwnd.hwnds.Delete(0);
except on e:exception do lasterr:=PChar(e.message);
end;
end;

procedure WNDHackFree(p:phwndcommand);stdcall;
begin
if p.hwnds<>nil then p.hwnds.Free;
dispose(p);
end;

procedure WNDResetError;stdcall;
begin
lasterr:=nil;
end;

function DestroyHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
nshow:integer):POINTER;stdcall;
var cmd:phwndcommand;
begin
new(cmd);
cmd.query:=lpquery;
cmd.found:=0;
cmd.Opcode:=4;
cmd.hwnds:=tlist.Create;
if not enumwindows(@mywndenum,Integer(cmd))then
if reserved>0 then begin
messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
exitprocess(0);
end else
lasterr:='EnumWindows failed';
if reserved>0 then exitprocess(cmd.found);
result:=cmd;
end;

function CloseHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
nshow:integer):POINTER;stdcall;
var cmd:phwndcommand;
begin
new(cmd);
cmd.query:=lpquery;
cmd.found:=0;
cmd.Opcode:=5;
cmd.hwnds:=tlist.Create;
if not enumwindows(@mywndenum,Integer(cmd))then
if reserved>0 then begin
messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
exitprocess(0);
end else
lasterr:='EnumWindows failed';
if reserved>0 then exitprocess(cmd.found);
result:=cmd;
end;

procedure ScreenSaverBox(hwn:hwnd;inst:hinst;lpscrfile:pchar;nshow:integer);stdcall;
begin
allocconsole;
setconsoletitle(lpscrfile);
if winexec(pchar(strpas(lpscrfile)+' /P '+inttostr(getconsolewindow)),sw_show)>31
then while true do asm NOP end;
MessageBox(hwn,'Error opening screensaver','Window Hacker',mb_iconerror);
end;

function CreateBox(shw:hwnd;resered:dword;lpQuery:PCHAR;nshow:integer):bool;stdcall;
var cmd:phwndcommand;
hw:hwnd;
i:integer;
S,q:string;
begin
result:=allocconsole;
setconsoletitle('WNDHackerBox');
setclasslong(getconsolewindow,gcl_hicon,loadicon(getmodulehandle('libwndhack.dll'),
'WNDMAN'));
writeln('Box for ',lpquery);
writeln('Box handle is $',inttohex(getconsolewindow,0));
new(cmd);
cmd.Opcode:=6;
cmd.etc:= Integer(Getconsolewindow);
cmd.found:=0;
cmd.query:=lpquery;
cmd.hwnds:=tlist.Create;
enumwindows(@mywndenum,Integer(cmd));
writeln(cmd.found,' windows has joined this box');
hw:=HWNDPop(cmd);
while hw<>0 do begin
writeln('Window Handle $',inttohex(hw,0),' has joined this box');hw:=hwndpop(cmd);
end;
while true do begin
write('WNDHack>');
readln(s);
s:=trim(s);
if Uppercase(s)='HELP' then begin
writeln('Commands Avaliable:');
writeln('ADD      searches for a window objects and adds them to this box');
writeln('CLOSE    Sends WM_CLOSE message to all window objects that are apart of this box');
end;
if uppercase(s)='ADD' then begin
write('WindowName/Classname:');
readln(q);
cmd.query:=PChar(q);
enumwindows(@mywndenum,Integer(cmd));
end;
if Uppercase(s)='CLOSE' then 
for i:= 0 to cmd.hwnds.count-1do
sendmessage(HWND(CMD.hwnds[i]),wm_close,0,0);
end;
end;

function EnableHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
nshow:integer):POINTER;stdcall;
var cmd:phwndcommand;
begin
new(cmd);
cmd.query:=lpquery;
cmd.found:=0;
cmd.Opcode:=2;
cmd.etc:=1;
cmd.hwnds:=tlist.Create;
if not enumwindows(@mywndenum,Integer(cmd))then
if reserved>0 then begin
messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
exitprocess(0);
end else
lasterr:='EnumWindows failed';
if reserved>0 then exitprocess(cmd.found);
result:=cmd;
end;

function DisableHWND(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
nshow:integer):POINTER;stdcall;
var cmd:phwndcommand;
begin
new(cmd);
cmd.query:=lpquery;
cmd.found:=0;
cmd.Opcode:=2;
cmd.etc:=0;
cmd.hwnds:=tlist.Create;
if not enumwindows(@mywndenum,Integer(cmd))then
if reserved>0 then begin
messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
exitprocess(0);
end else
lasterr:='EnumWindows failed';
if reserved>0 then exitprocess(cmd.found);
result:=cmd;
end;

function WindowSearch(lpQuery:pchar):phwndcommand;stdcall;
begin
new(result);
result.Opcode:=0;
result.hwnds:=tlist.Create;
result.found:=0;
if not enumwindows(@mywndenum,integer(result)) then
lasterr:='EnumWindows failed';
end;

function ChangeParent(hwnderr:hwnd;reserved:dword;lpQuery:pchar;
nshow:integer):POINTER;stdcall;
var cmd:phwndcommand;
sl:tstringlist;
begin
sl:=tstringlist.Create;
sl.CommaText:=strpas(lpQuery);
new(cmd);
cmd.query:=PChar(sl[0]);
cmd.found:=0;
cmd.Opcode:=6;
cmd.etc:=strtointdef(sl[1],getdesktopwindow);
cmd.hwnds:=tlist.Create;
sl.Free;
if not enumwindows(@mywndenum,Integer(cmd))then
if reserved>0 then begin
messagebox(hwnderr,'EnumWindows Failed',nil,mb_iconerror);
exitprocess(0);
end else
lasterr:='EnumWindows failed';
if reserved>0 then exitprocess(cmd.found);
result:=cmd;
end;

function WNDHackSize(var wnddata:thwndcommand):integer;stdcall;
begin
result:=sizeof(wnddata);
end;

procedure QueryFirstWindow(hw:hwnd;inst:hinst;lpQuery:pchar;nShow:integer);stdcall;
var cmd:phwndcommand;
begin
new(cmd);
cmd.Opcode:=0;
cmd.query:=lpquery;
cmd.found:=0;
cmd.hwnds:=tlist.Create;
enumwindows(@mywndenum,integer(cmd));
if cmd.found=0 then exitprocess(0);
exitprocess(hwndpop(cmd));
end;

exports WNDGetLastError,ShowHWND,HWNDPop,WNDHackFree,GetWNDReturnValue,CreateBox,
GetFoundWindowCount,WNDResetError,ClickButton,CloseHWND,DestroyHWND,DisableHWND,
EnableHWND,WindowSearch,ChangeParent,WNDHackSize,QueryFirstWindow,ScreenSaverBox;
begin
end.
Trash
 
 
Error
Unable to connect to backend.
HTTP error 0

All programs are virus free. Some antivirus software might say its "suspicious" or a "Potentionaly Unwanted Program". Some of them rate them on what there code looks like no matter if theres a definition in the virus database. If any of them are detected any Antivirus I will zip the software with the password "justin" j is lowercase

Published by Justin Roeder

I am an electronics engineer and computer programmer that has autism. I learned by myself

delphijustin Industries is an Autism Supported Business
Social Media Auto Publish Powered By : XYZScripts.com
All in one
Start
Amazon.com, Inc. OH Dublin
Your cart is empty.
There are 241 days, 14 hours, 1 minutes and 58 seconds left until Halloween

You can use the keyboard arrows to navigate between the component buttons
",e=e.removeChild(e.firstChild)):"string"==typeof o.is?e=l.createElement(a,{is:o.is}):(e=l.createElement(a),"select"===a&&(l=e,o.multiple?l.multiple=!0:o.size&&(l.size=o.size))):e=l.createElementNS(e,a),e[Ni]=t,e[Pi]=o,Pl(e,t,!1,!1),t.stateNode=e,l=Ae(a,o),a){case"iframe":case"object":case"embed":Te("load",e),u=o;break;case"video":case"audio":for(u=0;u<$a.length;u++)Te($a[u],e);u=o;break;case"source":Te("error",e),u=o;break;case"img":case"image":case"link":Te("error",e),Te("load",e),u=o;break;case"form":Te("reset",e),Te("submit",e),u=o;break;case"details":Te("toggle",e),u=o;break;case"input":A(e,o),u=M(e,o),Te("invalid",e),Ie(n,"onChange");break;case"option":u=B(e,o);break;case"select":e._wrapperState={wasMultiple:!!o.multiple},u=Uo({},o,{value:void 0}),Te("invalid",e),Ie(n,"onChange");break;case"textarea":V(e,o),u=H(e,o),Te("invalid",e),Ie(n,"onChange");break;default:u=o}Me(a,u);var s=u;for(i in s)if(s.hasOwnProperty(i)){var c=s[i];"style"===i?ze(e,c):"dangerouslySetInnerHTML"===i?(c=c?c.__html:void 0,null!=c&&Aa(e,c)):"children"===i?"string"==typeof c?("textarea"!==a||""!==c)&&X(e,c):"number"==typeof c&&X(e,""+c):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(ea.hasOwnProperty(i)?null!=c&&Ie(n,i):null!=c&&x(e,i,c,l))}switch(a){case"input":L(e),j(e,o,!1);break;case"textarea":L(e),$(e);break;case"option":null!=o.value&&e.setAttribute("value",""+P(o.value));break;case"select":e.multiple=!!o.multiple,n=o.value,null!=n?q(e,!!o.multiple,n,!1):null!=o.defaultValue&&q(e,!!o.multiple,o.defaultValue,!0);break;default:"function"==typeof u.onClick&&(e.onclick=Fe)}Ve(a,o)&&(t.effectTag|=4)}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(e&&null!=t.stateNode)Ll(e,t,e.memoizedProps,o);else{if("string"!=typeof o&&null===t.stateNode)throw Error(r(166));n=yn(yu.current),yn(bu.current),Jn(t)?(n=t.stateNode,o=t.memoizedProps,n[Ni]=t,n.nodeValue!==o&&(t.effectTag|=4)):(n=(9===n.nodeType?n:n.ownerDocument).createTextNode(o),n[Ni]=t,t.stateNode=n)}return null;case 13:return zt(vu),o=t.memoizedState,0!==(64&t.effectTag)?(t.expirationTime=n,t):(n=null!==o,o=!1,null===e?void 0!==t.memoizedProps.fallback&&Jn(t):(a=e.memoizedState,o=null!==a,n||null===a||(a=e.child.sibling,null!==a&&(i=t.firstEffect,null!==i?(t.firstEffect=a,a.nextEffect=i):(t.firstEffect=t.lastEffect=a,a.nextEffect=null),a.effectTag=8))),n&&!o&&0!==(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!==(1&vu.current)?rs===Qu&&(rs=Yu):(rs!==Qu&&rs!==Yu||(rs=Gu),0!==us&&null!==es&&(To(es,ns),Co(es,us)))),(n||o)&&(t.effectTag|=4),null);case 4:return wn(),Ol(t),null;case 10:return Zt(t),null;case 17:return It(t.type)&&Ft(),null;case 19:if(zt(vu),o=t.memoizedState,null===o)return null;if(a=0!==(64&t.effectTag),i=o.rendering,null===i){if(a)mr(o,!1);else if(rs!==Qu||null!==e&&0!==(64&e.effectTag))for(i=t.child;null!==i;){if(e=_n(i),null!==e){for(t.effectTag|=64,mr(o,!1),a=e.updateQueue,null!==a&&(t.updateQueue=a,t.effectTag|=4),null===o.lastEffect&&(t.firstEffect=null),t.lastEffect=o.lastEffect,o=t.child;null!==o;)a=o,i=n,a.effectTag&=2,a.nextEffect=null,a.firstEffect=null,a.lastEffect=null,e=a.alternate,null===e?(a.childExpirationTime=0,a.expirationTime=i,a.child=null,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null):(a.childExpirationTime=e.childExpirationTime,a.expirationTime=e.expirationTime,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,i=e.dependencies,a.dependencies=null===i?null:{expirationTime:i.expirationTime,firstContext:i.firstContext,responders:i.responders}),o=o.sibling;return Mt(vu,1&vu.current|2),t.child}i=i.sibling}}else{if(!a)if(e=_n(i),null!==e){if(t.effectTag|=64,a=!0,n=e.updateQueue,null!==n&&(t.updateQueue=n,t.effectTag|=4),mr(o,!0),null===o.tail&&"hidden"===o.tailMode&&!i.alternate)return t=t.lastEffect=o.lastEffect,null!==t&&(t.nextEffect=null),null}else 2*ru()-o.renderingStartTime>o.tailExpiration&&1t)&&vs.set(e,t)))}}function Ur(e,t){e.expirationTimee?n:e,2>=e&&t!==e?0:e}function qr(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=$t(Vr.bind(null,e));else{var t=Br(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var r=Fr();if(1073741823===t?r=99:1===t||2===t?r=95:(r=10*(1073741821-t)-10*(1073741821-r),r=0>=r?99:250>=r?98:5250>=r?97:95),null!==n){var o=e.callbackPriority;if(e.callbackExpirationTime===t&&o>=r)return;n!==Yl&&Bl(n)}e.callbackExpirationTime=t,e.callbackPriority=r,t=1073741823===t?$t(Vr.bind(null,e)):Wt(r,Hr.bind(null,e),{timeout:10*(1073741821-t)-ru()}),e.callbackNode=t}}}function Hr(e,t){if(ks=0,t)return t=Fr(),No(e,t),qr(e),null;var n=Br(e);if(0!==n){if(t=e.callbackNode,(Ju&(Wu|$u))!==Hu)throw Error(r(327));if(lo(),e===es&&n===ns||Kr(e,n),null!==ts){var o=Ju;Ju|=Wu;for(var a=Yr();;)try{eo();break}catch(t){Xr(e,t)}if(Gt(),Ju=o,Bu.current=a,rs===Ku)throw t=os,Kr(e,n),To(e,n),qr(e),t;if(null===ts)switch(a=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,o=rs,es=null,o){case Qu:case Ku:throw Error(r(345));case Xu:No(e,2=n){e.lastPingedTime=n,Kr(e,n);break}}if(i=Br(e),0!==i&&i!==n)break;if(0!==o&&o!==n){e.lastPingedTime=o;break}e.timeoutHandle=Si(oo.bind(null,e),a);break}oo(e);break;case Gu:if(To(e,n),o=e.lastSuspendedTime,n===o&&(e.nextKnownPendingLevel=ro(a)),ss&&(a=e.lastPingedTime,0===a||a>=n)){e.lastPingedTime=n,Kr(e,n);break}if(a=Br(e),0!==a&&a!==n)break;if(0!==o&&o!==n){e.lastPingedTime=o;break}if(1073741823!==is?o=10*(1073741821-is)-ru():1073741823===as?o=0:(o=10*(1073741821-as)-5e3,a=ru(),n=10*(1073741821-n)-a,o=a-o,0>o&&(o=0),o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*Uu(o/1960))-o,n=o?o=0:(a=0|l.busyDelayMs,i=ru()-(10*(1073741821-i)-(0|l.timeoutMs||5e3)),o=i<=a?0:a+o-i),10 component higher in the tree to provide a loading indicator or placeholder to display."+N(i))}rs!==Zu&&(rs=Xu),l=yr(l,i),f=a;do{switch(f.tag){case 3:u=l,f.effectTag|=4096,f.expirationTime=t;var w=Ar(f,u,t);ln(f,w); break e;case 1:u=l;var E=f.type,k=f.stateNode;if(0===(64&f.effectTag)&&("function"==typeof E.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===ms||!ms.has(k)))){f.effectTag|=4096,f.expirationTime=t;var _=Ir(f,u,t);ln(f,_);break e}}f=f.return}while(null!==f)}ts=no(ts)}catch(e){t=e;continue}break}}function Yr(){var e=Bu.current;return Bu.current=Cu,null===e?Cu:e}function Gr(e,t){eus&&(us=e)}function Jr(){for(;null!==ts;)ts=to(ts)}function eo(){for(;null!==ts&&!Gl();)ts=to(ts)}function to(e){var t=Fu(e.alternate,e,ns);return e.memoizedProps=e.pendingProps,null===t&&(t=no(e)),qu.current=null,t}function no(e){ts=e;do{var t=ts.alternate;if(e=ts.return,0===(2048&ts.effectTag)){if(t=br(t,ts,ns),1===ns||1!==ts.childExpirationTime){for(var n=0,r=ts.child;null!==r;){var o=r.expirationTime,a=r.childExpirationTime;o>n&&(n=o),a>n&&(n=a),r=r.sibling}ts.childExpirationTime=n}if(null!==t)return t;null!==e&&0===(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=ts.firstEffect),null!==ts.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=ts.firstEffect),e.lastEffect=ts.lastEffect),1e?t:e}function oo(e){var t=qt();return Vt(99,ao.bind(null,e,t)),null}function ao(e,t){do lo();while(null!==gs);if((Ju&(Wu|$u))!==Hu)throw Error(r(327));var n=e.finishedWork,o=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw Error(r(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var a=ro(n);if(e.firstPendingTime=a,o<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:o<=e.firstSuspendedTime&&(e.firstSuspendedTime=o-1),o<=e.lastPingedTime&&(e.lastPingedTime=0),o<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===es&&(ts=es=null,ns=0),1u&&(c=u,u=l,l=c),c=Ue(w,l),f=Ue(w,u),c&&f&&(1!==k.rangeCount||k.anchorNode!==c.node||k.anchorOffset!==c.offset||k.focusNode!==f.node||k.focusOffset!==f.offset)&&(E=E.createRange(),E.setStart(c.node,c.offset),k.removeAllRanges(),l>u?(k.addRange(E),k.extend(f.node,f.offset)):(E.setEnd(f.node,f.offset),k.addRange(E)))))),E=[];for(k=w;k=k.parentNode;)1===k.nodeType&&E.push({element:k,left:k.scrollLeft,top:k.scrollTop});for("function"==typeof w.focus&&w.focus(),w=0;w=t&&e<=t}function To(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;nt||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Co(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function No(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function Po(e,t,n,o){var a=t.current,i=Fr(),l=su.suspense;i=jr(i,a,l);e:if(n){n=n._reactInternalFiber;t:{if(J(n)!==n||1!==n.tag)throw Error(r(170));var u=n;do{switch(u.tag){case 3:u=u.stateNode.context;break t;case 1:if(It(u.type)){u=u.stateNode.__reactInternalMemoizedMergedChildContext;break t}}u=u.return}while(null!==u);throw Error(r(171))}if(1===n.tag){var s=n.type;if(It(s)){n=Dt(n,s,u);break e}}n=u}else n=Al;return null===t.context?t.context=n:t.pendingContext=n,t=on(i,l),t.payload={element:e},o=void 0===o?null:o,null!==o&&(t.callback=o),an(a,t),Dr(a,i),i}function Oo(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function Ro(e,t){e=e.memoizedState,null!==e&&null!==e.dehydrated&&e.retryTime