Promiň, ale ty programátor nikdy nebudeš. Určitě ne v Delphi.
if IsDebugerPresent = true then ...
jako by už fce IsDebugerPresent nevracela boolean sama o sobě. Stačí "if IsDebugerPresent then ..."
Řádková podmínka, znáš? Nemusíš tam pak psát begin a end, což ostatně nemusíš ani, když tam máš asm ... end, tj.
"if cond then
asm
něco
end;"
A proč tam nutně cpeš ten assembler. To si jako myslíš, že když napíšeš ExitProcess(0), že se to nezoptimaluzuje úplně stejně jako když to napíšeš v assembleru a ještě špatně? Proč špatně? Zapomněl jsi na zásobník uložit návratovou hodnotu programu ...
String(Pchar(item)) -- tohle se mi líbí. String přetypujeme na PChar a pak zpátky na string, jak sexy.
SetLength(item,255); -- říká ti něco fce GetWindowTextLength(HWND) ? Asi ne, protože by se to k té alokaci poměti docela hodilo. Takovýma prasárnama jako je ta tvoje pak dochází v programu k přetečení.
GetWindowText(HWNDShell,Pchar(item),8); -- ano, naalokujeme 255B a pak tam stejně uložíme jen 8B. I když máš třeba 2GB RAM, občas se vyplatí šetřit pamětí kvůli ostatním.
Také je prdel, že jednou použiješ ExitProcess a po druhé application.terminate. Přikláněl bych se k tomu druhému, protože to si program po sobě hezky uklidí, např. korektně uvolní paměť naalokovanou pro VCL pitominy. Při použití ExitProcess to sice uklidí operační systém místo programu, ale není to zrova hezké.
To rozpoznávání titulku je pěkně nahovno. Rozcuchá to pak i okno jiného programu se stejným titulkem.
Zdarec a neflákej to.
A ještě něco. Používej tag <pre> pro výpisy zdrojových kódů a hezky to odsazuj, tohle je čuňárna. |