nyuuzyou/wikis huggingface dataset:
Как програмно нажать SpeedButton?

=== Как программно нажать SpeedButton? ===
SpeedButton1.Perform(WM_LBUTTONDOWN, 0, 0); 
SpeedButton1.Perform(WM_LBUTTONUP, 0, 0);
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01231
Как програмно переключить раскладку клавиатуры?

=== Как программно переключить раскладку клавиатуры? ===
procedure TForm1.Button1Click(Sender: TObject); // На русский
var
 Layout: array[0..KL_NAMELENGTH] of char;
begin
 LoadKeyboardLayout(StrCopy(Layout, '00000419'), KLF_ACTIVATE);
end;
procedure TForm1.Button2Click(Sender: TObject); // На английский
var
 Layout: array[0..KL_NAMELENGTH] of char;
begin
 LoadKeyboardLayout(StrCopy(Layout, '00000409'), KLF_ACTIVATE);
end;
Source: Взято из http://forum.sources.ru
ID: 01511
Как програмно переключить состояние клавиш Num Lock, Caps Lock, Scroll Lock?

=== Как програмно переключить состояние клавиш Num Lock, Caps Lock, Scroll Lock? ===
var 
 KS: TKeyboardState; 
begin
 GetKeyboardState(KS); 
 KS[020] := KS[020] XOR 1; // Caps Lock
 KS[144] := KS[144] XOR 1; // Num Lock
 KS[145] := KS[145] XOR 1; // Scroll Lock
 SetKeyboardState(KS); 
end;
Source: Взято из http://forum.sources.ru
ID: 01492
----
* Во-первых, предложенный способ работает только под 9x (лично проверил)...
* Во-вторых, для понятности лучше вместо цифр подставить нормальные константы...
* В-третьих, тут еще способ и для NT...
Способ для 9x (на NT не работает):
var
 KeyState: TKeyboardState;
begin
 GetKeyboardState(KeyState);
 KeyState[VK_SCROLL] := KeyState[VK_SCROLL] xor 1;
 KeyState[VK_CAPITAL] := KeyState[VK_CAPITAL] xor 1;
 KeyState[VK_NUMLOCK] := KeyState[VK_NUMLOCK] xor 1;
 SetKeyboardState(KeyState);
end; 
Способ для NT (на 9x не работает):
begin
 keybd_event(VK_SCROLL, 0, KEYEVENTF_EXTENDEDKEY, 0);
 keybd_event(VK_SCROLL, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
 keybd_event(VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY, 0);
 keybd_event(VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
 keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY, 0);
 keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;
т.е. в программе надо будет сделать проверку на версию Windows, и потом уже вызывать одну из этих функций, либо же можно их обе вызывать - одна да сработает...
Author: p0s0l
ID: 01493
----
Как программно включить или выключить NumLock 
var
 abKeyState: array [0..255] of byte;
begin
 GetKeyboardState(Addr(abKeyState[0]));
 abKeyState[VK_NUMLOCK] := abKeyState[VK_NUMLOCK] or $01;
 SetKeyboardState(Addr(abKeyState[0]));
end;
Source: http://delphiworld.narod.ru/
ID: 01494
----
procedure TMyForm.Button1Click(Sender: TObject);
var
 KeyState: TKeyboardState;
begin
 GetKeyboardState(KeyState);
 if (KeyState[VK_NUMLOCK] = 0) then
 KeyState[VK_NUMLOCK] := 1
 else
 KeyState[VK_NUMLOCK] := 0;
 SetKeyboardState(KeyState);
end;
Для Caps Lock замените VK_NUMLOCK на VK_CAPITAL.
Source: http://delphiworld.narod.ru/
ID: 01495
----
type
 TKeyType = (ktCapsLock, ktNumLock, ktScrollLock);
procedure SetLedState(KeyCode: TKeyType; bOn: Boolean);
var
 KBState: TKeyboardState;
 Code: Byte;
begin
 case KeyCode of
 ktScrollLock: Code := VK_SCROLL;
 ktCapsLock: Code := VK_CAPITAL;
 ktNumLock: Code := VK_NUMLOCK;
 end;
 GetKeyboardState(KBState);
 if (Win32Platform = VER_PLATFORM_WIN32_NT) then
 begin
 if Boolean(KBState[Code]) <> bOn then
 begin
 keybd_event(Code,
 MapVirtualKey(Code, 0),
 KEYEVENTF_EXTENDEDKEY,
 0);
 keybd_event(Code,
 MapVirtualKey(Code, 0),
 KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,
 0);
 end;
 end
 else
 begin
 KBState[Code] := Ord(bOn);
 SetKeyboardState(KBState);
 end;
end;
// Example Call: 
// Beispielaufruf: 
procedure TForm1.Button1Click(Sender: TObject);
begin
 SetLedState(ktCapsLock, True); // CapsLock on 
 SetLedState(ktNumLock, True); // NumLock on 
 SetLedState(ktScrollLock, True); // ScrollLock on 
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01496
Как проиграть Wave-ресурс?

Сначала делаешь файл SOUND.RC, в нем строка вида:
 MY_WAV RCDATA TEST.WAV
Компилишь чем-нибyдь в *.RES
Далее в тексте:
{$R полное_имя_файла_с_ресурсом}
var
 WaveHandle: THandle;
 WavePointer: Pointer;
begin
 WaveHandle := FindResource(hInstance, 'MY_WAV', RT_RCDATA);
 if WaveHandle <> 0 then
 begin
 WaveHandle := LoadResource(hInstance, WaveHandle);
 if WaveHandle <> 0 then
 begin;
 WavePointer := LockResource(WaveHandle);
 PlayResourceWave := sndPlaySound(WavePointer, snd_Memory or SND_ASYNC);
 UnlockResource(WaveHandle);
 FreeResource(WaveHandle);
 end;
 end;
end;
Author: Serg Vostrikov (2:5053/15.3)
Source: http://blackman.wp-club.net/
ID: 03597
Category:Звук
Как проиграть wav из ресурса не сохраняя его в файл?

var
 FindHandle, ResHandle: THandle;
 ResPtr: Pointer;
begin
 FindHandle := FindResource(HInstance, 'Name of your resource', 'WAVE');
 if FindHandle <> 0 then
 begin
 ResHandle := LoadResource(HInstance, FindHandle);
 if ResHandle <> 0 then
 begin
 ResPtr := LockResource(ResHandle);
 if ResPtr <> nil then
 SndPlaySound(PChar(ResPtr), snd_ASync or snd_Memory);
 UnlockResource(ResHandle);
 end;
 FreeResource(FindHandle);
 end;
end;
Source: http://www.baltsoft.com/
ID: 03608
Category:Звук
Как проигрывать 2 звука одновременно?

uses
 MMSystem;
procedure SendMCICommand(Cmd: string);
var
 RetVal: Integer;
 ErrMsg: array[0..254] of Char;
begin
 RetVal := mciSendString(PChar(Cmd), nil, 0, 0);
 if RetVal <> 0 then
 begin
 { get message for returned value }
 mciGetErrorString(RetVal, ErrMsg, 255);
 MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 SendMCICommand('open waveaudio shareable');
 SendMCICommand('play "C:\xyz\BackgroundMusic.wav"');
 SendMCICommand('play "C:\xyz\AnotherMusic.wav"');
 SendMCICommand('close waveaudio');
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03598
Category:Звук
Как производить Печать?

Есть два способа вывода на печать. Первый пример работает в IE 4.x и выше, в то время как второй пример расчитан на IE 3.x:
var
 vaIn, vaOut: OleVariant;
WebBrowser.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
либо
procedure TForm1.PrintIE;
var
 CmdTarget: IOleCommandTarget;
 vaIn, vaOut: OleVariant;
begin
 if WebBrowser1.Document <> nil then
 try
 WebBrowser1.Document.QueryInterface(IOleCommandTarget, CmdTarget);
 if CmdTarget <> nil then
 try
 CmdTarget.Exec(PGuid(nil), OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
 finally
 CmdTarget._Release;
 end;
 except
 // Ничего
 end;
end;
Обратите внимание: Если версия Delphi ниже чем 3.02, то необходимо заменить PGuid(nil) на PGuid(nil)^. А лучше всего проапгрейдить до 3.02 (если Вы пользуетесь версиями 3.0 или 3.01).
Перевод материала с сайта members.home.com/hfournier/webbrowser.htm
Source: http://blackman.km.ru/myfaq/cont4.phtml
ID: 03481
Category:Связь
Category:WebBrowser
Как прокрутить TRichEdit в конец?

=== Как прокрутить TRichEdit в конец? ===
Существует множество способов, включая и:
Code: ---DO NOT USE THIS EXAMPLE - SEE BELOW INSTEAD--- 
 with MainFrm.RichEdit1 do 
 begin 
 Perform(WM_VSCROLL, SB_BOTTOM, 0); 
 Perform(WM_VSCROLL, SB_PAGEUP, 0); 
 end; 
Вышеприведенный пример работает отлично в 9x и NT4, но не работает в Windows 2000. Поэтому предлагаю воспользоваться следующим примером:
 with MainFrm.RichEdit1 do 
 begin 
 SelStart := Length(Text); 
 Perform(EM_SCROLLCARET, 0, 0); 
 end;
Source: Взято из http://forum.sources.ru
ID: 00566
Как прочитать/изменить startpage IE?

uses
 Registry;
function GetIEStartPage: string;
var
 Reg: TRegistry;
begin
 Reg := TRegistry.Create;
 try
 Reg.RootKey := HKEY_CURRENT_USER;
 Reg.OpenKey('Software\Microsoft\Internet Explorer\Main', False);
 try
 Result := Reg.ReadString('Start Page');
 except
 Result := ;
 end;
 Reg.CloseKey;
 finally
 Reg.Free;
 end;
end;
function SetIEStartPage(APage: string): Boolean;
var
 Reg: TRegistry;
begin
 Reg := TRegistry.Create;
 try
 Reg.RootKey := HKEY_CURRENT_USER;
 Reg.OpenKey('Software\Microsoft\Internet Explorer\Main', False);
 try
 Reg.WriteString('Start Page', APage);
 Result := True;
 finally
 Reg.CloseKey;
 Result := False;
 end;
 finally
 Reg.Free;
 end;
end;
// Show the Startpage
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(GetIEStartPage);
end;
// Set the Startpage
procedure TForm1.Button2Click(Sender: TObject);
begin
 SetIEStartPage('http://forum.vingrad.ru');
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03514
Category:Связь
Category:WebBrowser
Как прочитать/установить принтер по умолчанию?

uses
 Printers, Messages;
function GetDefaultPrinter: string;
var
 ResStr: array[0..255] of Char;
begin
 GetProfileString('Windows', 'device', , ResStr, 255);
 Result := StrPas(ResStr);
end;
procedure SetDefaultPrinter1(NewDefPrinter: string);
var
 ResStr: array[0..255] of Char;
begin
 StrPCopy(ResStr, NewdefPrinter);
 WriteProfileString('windows', 'device', ResStr);
 StrCopy(ResStr, 'windows');
 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr));
end;
procedure SetDefaultPrinter2(PrinterName: string);
var
 I: Integer;
 Device: PChar;
 Driver: PChar;
 Port: PChar;
 HdeviceMode: THandle;
 aPrinter: TPrinter;
begin
 Printer.PrinterIndex := -1;
 GetMem(Device, 255);
 GetMem(Driver, 255);
 GetMem(Port, 255);
 aPrinter := TPrinter.Create;
 try
 for I := 0 to Printer.Printers.Count - 1 do
 begin
 if Printer.Printers = PrinterName then
 begin
 aprinter.PrinterIndex := i;
 aPrinter.getprinter(device, driver, port, HdeviceMode);
 StrCat(Device, ',');
 StrCat(Device, Driver);
 StrCat(Device, Port);
 WriteProfileString('windows', 'device', Device);
 StrCopy(Device, 'windows');
 SendMessage(HWND_BROADCAST, WM_WININICHANGE,
 0, Longint(@Device));
 end;
 end;
 finally
 aPrinter.Free;
 end;
 FreeMem(Device, 255);
 FreeMem(Driver, 255);
 FreeMem(Port, 255);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 label1.Caption := GetDefaultPrinter2;
end;
// Fill the combobox with all available printers
procedure TForm1.FormCreate(Sender: TObject);
begin
 Combobox1.Items.Clear;
 Combobox1.Items.AddStrings(Printer.Printers);
end;
// Set the selected printer in the combobox as default printer
procedure TForm1.Button2Click(Sender: TObject);
begin
 SetDefaultPrinter(Combobox1.Text);
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03207
----
uses
 IniFiles;
procedure TForm1.Button1Click(Sender: TObject);
var
 WinIni: TIniFile;
 WinIniFileName: array [0..MAX_PATH] of Char;
 s: array [0..64] of Char;
begin
 GetWindowsDirectory(WinIniFileName, SizeOf(WinIniFileName));
 StrCat(WinIniFileName, '\win.ini');
 WinIni := TIniFile.Create(WinIniFileName);
 try
 WinIni.WriteString('windows','device', 'HP LaserJet Series II,HPPCL,LPT1:');
 finally
 WinIni.Free;
 end;
 StrCopy(S, 'windows');
 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
end;
Source: Взято с http://delphiworld.narod.ru
ID: 03208
----
; Примечание от Vit: Поместил предыдущие ответы на сей вопрос и даже не знаю, а надо ли было? Изобретение велосипеда! В Дельфи есть предопределённый системный объект Printer типа TPrinter, в нём уже есть готовые свойства и методы как для чтения текущего принтера (и всех остальных принтеров тоже), так и для изменения текущего принтера на другой. Хочу добавить что реализация через API может несколько различается для разных версий Windows и простой код по изменению текущего принтера вовсе не факт будет работать стабильно на всех системах. Используйте объект Printer - это более надёжно и просто.
ID: 03209
Category:Принтер
Как прочитать адрес отправителя?

{
 If you tried to work with messages from Delphi, you know that received message have the
 SenderName property (name of sender) but doesn't allow to read the real address of sender.
 Something like SenderAddress is not available.
 There exist a few methods to retrieve this information:
 1. help file says that sender is in Recipients collection
 with Type property - 0 (olOriginator).
 But this way does work for any version of MS Outlook.
 So just iterate thru collection of Recipients and find an item with Type=0
 couldn't return required value
 2. as alternative you can read a ReplyTo property - there you'll receive an address
 (but generally ReplyTo and Sender could be different).
 For example, in messages which I send from own mail account these values are different.
 3. to create a new MailItem (just will be destroyed without saving in end of work),
 define a Recipient as value which you received from SenderName of your original
 message and call a Resolve method - after that you'll recieve a correct email address of this sender.
 4. more correct and fast solution is the next:
}
var
 s: string;
 objCDO: OLEVariant;
begin
 objCDO := CreateOLEObject('MAPI.Session');
 objCDO.Logon(, , False, False);
 objMsg := objCDO.GetMessage(itemOL.EntryID, itemOL.Parent.StoreID);
 s := objMsg.Sender.Address;
 ShowMessage(s);
 objMsg := Unassigned;
 objCDO := Unassigned;
end
{ where itemOL is a MailItem which contain a SenderName but doesn't contain a SenderAddress }
ID: 04443
Category:COM
Category:MS Office
Как прочитать базу данных с Досовским шрифтом

=== Как прочитать базу данных с Досовским шрифтом ===
При старте приложения попробуй вызвать вот такую процедуру:
procedure SetLangForParadoxAndDBase;
var
 p: TStringList;
 c: TConfigMode;
begin
 p := TStringList.Create;
 c := Session.ConfigMode;
 Session.ConfigMode := cmSession;
 try
 p.Text := 'LANGDRIVER=ancyrr'^M^J'LEVEL=7';
 Session.ModifyDriver('PARADOX', p);
 p.Text := 'LANGDRIVER=db866ru0'^M^J'LEVEL=7';
 Session.ModifyDriver('DBASE', p);
 finally
 Session.ConfigMode := c;
 p.Free;
 end;
end;
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02715
Как прочитать байт из параллельного порта?

=== Как прочитать байт из параллельного порта? ===
Первый способ:
var 
 BytesRead: BYTE; 
begin 
 asm { Читаем порт (LPT1) через встроенный ассемблер } 
 MOV dx,$379; 
 IN al,dx; 
 MOV BytesRead,al; 
 end; 
 BytesRead := (BytesRead OR $07); { OR а затем XOR данных } 
 BytesRead := (BytesRead XOR $80); { маскируем неиспользуемые биты } 
Второй способ :
Используем команды Turbo Pascal ...
 value := port[$379]; { Прочитать из порта } 
 port[$379] := value; { Записать в порт }
Source: Взято из http://forum.sources.ru
ID: 01340
Как прочитать владельца файла?

=== Как прочитать владельца файла? ===
// When you create a file or directory, you become the owner of it.
// With GetFileOwner you get the owner of a file.
function GetFileOwner(FileName: string;
 var Domain, Username: string): Boolean;
var
 SecDescr: PSecurityDescriptor;
 SizeNeeded, SizeNeeded2: DWORD;
 OwnerSID: PSID;
 OwnerDefault: BOOL;
 OwnerName, DomainName: PChar;
 OwnerType: SID_NAME_USE;
begin
 GetFileOwner := False;
 GetMem(SecDescr, 1024);
 GetMem(OwnerSID, SizeOf(PSID));
 GetMem(OwnerName, 1024);
 GetMem(DomainName, 1024);
 try
 if not GetFileSecurity(PChar(FileName),
 OWNER_SECURITY_INFORMATION,
 SecDescr, 1024, SizeNeeded) then
 Exit;
 if not GetSecurityDescriptorOwner(SecDescr,
 OwnerSID, OwnerDefault) then
 Exit;
 SizeNeeded := 1024;
 SizeNeeded2 := 1024;
 if not LookupAccountSID(nil, OwnerSID, OwnerName,
 SizeNeeded, DomainName, SizeNeeded2, OwnerType) then
 Exit;
 Domain := DomainName;
 Username := OwnerName;
 finally
 FreeMem(SecDescr);
 FreeMem(OwnerName);
 FreeMem(DomainName);
 end;
 GetFileOwner := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
 Domain, Username: string;
begin
 GetFileOwner('YourFile.xyz', domain, username);
 ShowMessage(username + '@' + domain);
end;
// Note: Only works unter NT.
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03116
Category:Файловая система
Как прочитать время компиляции проги?

Дату компиляции вытащить нельзя. Можно дату Build (т.е. дату когда ты сделал операцию Build All, или самую первую компиляцию)
:1) Ставим библиотеку RxLib
:2) Идем в опции проекта, закладка Version Info, отмечаем птичкой - include version info
:3) В коде пишем следующее
uses
 Rxverinf;
procedure TForm1.Button1Click(Sender: TObject);
begin
 with TVersionInfo.Create(ParamStr(0)) do
 try
 Caption := DateTimeToStr(VerFileDate);
 finally
 Free;
 end;
end;
Author: Vit
Source: Vingrad.ru http://forum.vingrad.ru
ID: 04567
Category:Разработка приложений
Как прочитать выделенный текст из IE?

uses
 SHDocVw_TLB; // http://www.euromind.com/iedelphi if don't have that unit
function GetSelectedIEtext: string;
var
 x: Integer;
 Sw: IShellWindows;
 IE: HWND;
begin
 IE := FindWindow('IEFrame', nil);
 sw := CoShellWindows.Create;
 for x := SW.Count - 1 downto 0 do
 if (Sw.Item(x) as IWebbrowser2).hwnd = IE then
 begin
 Result := variant(Sw.Item(x)).Document.Selection.createRange.Text;
 break;
 end;
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03510
Category:Связь
Category:WebBrowser
Как прочитать заголовок wav файла?

type
 TWaveHeader = record
 ident1: array[0..3] of Char; // Must be "RIFF"
 len: DWORD; // Remaining length after this header
 ident2: array[0..3] of Char; // Must be "WAVE"
 ident3: array[0..3] of Char; // Must be "fmt "
 reserv: DWORD; // Reserved 4 bytes
 wFormatTag: Word; // format type
 nChannels: Word; // number of channels (i.e. mono, stereo, etc.)
 nSamplesPerSec: DWORD; // sample rate
 nAvgBytesPerSec: DWORD; // for buffer estimation
 nBlockAlign: Word; // block size of data
 wBitsPerSample: Word; // number of bits per sample of mono data
 cbSize: Word; // the count in bytes of the size of
 ident4: array[0..3] of Char; // Must be "data"
end;
With this structure you can get all the information's about a wave file you want to.
After this header following the wave data which contains the data for playing the wave file.
Now we trying to get the information's from a wave file. To be sure it's really a wave file, we test the information's:
function GetWaveHeader(FileName: TFilename): TWaveHeader;
const
 riff = 'RIFF';
 wave = 'WAVE';
var
 f: TFileStream;
 w: TWaveHeader;
begin
 if not FileExists(Filename) then
 exit; // exit the function if the file does not exists
 try
 f := TFileStream.create(Filename, fmOpenRead);
 f.Read(w, Sizeof(w)); // Reading the file header
 if w.ident1 <> riff then
 begin // Test if it is a RIFF file, otherwise exit
 Showmessage('This is not a RIFF File');
 exit;
 end;
 if w.ident2 <> wave then
 begin // Test if it is a wave file, otherwise exit
 Showmessage('This is not a valid wave file');
 exit;
 end;
 finally
 f.free;
 end;
 Result := w;
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 04292
Category:Форматы файлов
Как прочитать и изменить doubleclick time?

=== Как прочитать и изменить doubleclick time? ===
// Set example:
procedure TForm1.Button1Click(Sender: TObject);
begin
 // will reset after system start
 SetDoubleClickTime(1500);
end;
// Get example:
procedure TForm1.Button2Click(Sender: TObject);
begin
 ShowMessage(IntToStr(GetDoubleClickTime));
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01566
Как прочитать из модема?

=== Как прочитать из модема? ===
После предварительной настройки переменных, COM порт открывается как обычный файл. Так же пример показывает, как очищать буфер COM порта и читать из него.
var 
 PortSpec: array[0..255] of Char; 
 PortNo: Word; 
 success: Boolean; 
 error: Integer; 
begin 
 FillChar(PortSpec, Sizeof(PortSpec), #0); 
 StrPCopy(PortSpec, 'Com1:19200,n,8,1'); 
 PortSpec[3] := Char(Ord(PortSpec[3]) + Ord(PortNo)); 
 if not BuildCommDCB(PortSpec, Mode) then 
 begin 
 // какая-то ошибка... 
 Exit; 
 end; 
 PortSpec[5] := #0; { 'Com1:' } 
 Mode.Flags := EV_RXCHAR + EV_EVENT2; { $1001 } 
 Com := CreateFile(PortSpec, GENERIC_READ or GENERIC_WRITE, 
 0, // comm устройство открывается с эксклюзивным доступом
 Nil, // нет security битов
 OPEN_EXISTING, // comm устройства должны использовать OPEN_EXISTING
 0, // not overlapped I/O
 0 // hTemplate должен быть NULL для comm устройств
 ); 
 if Com = INVALID_HANDLE_VALUE then
 Error := GetLastError; 
 Success := GetCommState(Com, Mode); 
 if not Success then // Обработчик ошибки. 
 begin 
 end; 
 Mode.BaudRate := 19200; 
 Mode.ByteSize := 8; 
 Mode.Parity := NOPARITY; 
 Mode.StopBits := ONESTOPBIT;//нужен был для перезаписи в NT 
 Success := SetCommState(Com, Mode); 
 if not Success then // Обработчик ошибки. 
 begin 
 end; 
end; 
Переменная "com" типа dword. 
Вы так же можете очистить буфер COM порта
 PurgeComm(Com, PURGE_RXCLEAR or PURGE_TXCLEAR);
И прочитать из него 
function ReadCh(var Ch: Byte): DWORD; 
var 
 n: dword; 
begin 
 Readfile(Com, ch, 1, Result, nil); 
end;
Source: Взято из http://forum.sources.ru
ID: 01463
Как прочитать название порта принтера?

{ ... }
uses
 printers, winspool;
function GetCurrentPrinterHandle: THandle;
const
 Defaults: TPrinterDefaults = (pDatatype: nil; pDevMode: nil; DesiredAccess:
 PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER);
var
 Device, Driver, Port: array[0..255] of char;
 hDeviceMode: THandle;
begin
 Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
 if not OpenPrinter(@Device, Result, @Defaults) then
 RaiseLastWin32Error;
end;
procedure TForm1.Button1Click(Sender: TObject);
 procedure Display(const prefix: string; S: PChar);
 begin
 memo1.Lines.Add(prefix + string(S));
 end;
var
 pInfo: PPrinterInfo2;
 bytesNeeded: DWORD;
 hPrinter: THandle;
 i: Integer;
begin
 for i := 0 to printer.Printers.Count - 1 do
 begin
 Printer.PrinterIndex := i;
 hPrinter := GetCurrentPrinterHandle;
 try
 GetPrinter(hPrinter, 2, nil, 0, @bytesNeeded);
 pInfo := AllocMem(bytesNeeded);
 try
 GetPrinter(hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded);
 Display('ServerName: ', pInfo^.pServerName);
 Display('PrinterName: ', pInfo^.pPrinterName);
 Display('ShareName: ', pInfo^.pShareName);
 Display('PortName: ', pInfo^.pPortName);
 finally
 FreeMem(pInfo);
 end;
 finally
 ClosePrinter(hPrinter);
 end;
 end;
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 03204
Category:Принтер
Как прочитать очередь печати?

uses
 Winspool, Printers;
function GetCurrentPrinterHandle: THandle;
var
 Device, Driver, Port: array[0..255] of Char;
 hDeviceMode: THandle;
begin
 Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
 if not OpenPrinter(@Device, Result, nil) then
 RaiseLastWin32Error;
end;
function SavePChar(p: PChar): PChar;
const
 error: PChar = 'Nil';
begin
 if not Assigned(p) then
 Result := error
 else
 Result := p;
end;
procedure TForm1.Button1Click(Sender: TObject);
type
 TJobs = array [0..1000] of JOB_INFO_1;
 PJobs = ^TJobs;
var
 hPrinter: THandle;
 bytesNeeded, numJobs, i: Cardinal;
 pJ: PJobs;
begin
 hPrinter := GetCurrentPrinterHandle;
 try
 EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded, numJobs);
 pJ := AllocMem(bytesNeeded);
 if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded, bytesNeeded, numJobs) then
 RaiseLastWin32Error;
 memo1.Clear;
 if numJobs = 0 then
 memo1.Lines.Add('No jobs in queue')
 else
 for i := 0 to Pred(numJobs) do
 memo1.Lines.Add(Format('Printer %s, Job %s, Status (%d): %s',
 [SavePChar(pJ^[i].pPrinterName), SavePChar(pJ^[i].pDocument),
 pJ^[i].Status, SavePChar(pJ^[i].pStatus)]));
 finally
 ClosePrinter(hPrinter);
 end;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03202
Category:Принтер
Как прочитать пароль, скрытый за звездочками?

=== Как прочитать пароль, скрытый за звездочками? ===
Наверно так: хотя классов может быть больше
procedure TForm1.Timer1Timer(Sender: TObject);
var
 Wnd : HWND;
 lpClassName: array [0..$FF] of Char;
begin
 Wnd := WindowFromPoint(Mouse.CursorPos);
 GetClassName (Wnd, lpClassName, $FF);
 if ((StrPas(lpClassName) = 'TEdit') or (StrPas(lpClassName) = 'EDIT')) then
 PostMessage (Wnd, EM_SETPASSWORDCHAR, 0, 0);
end; 
Здесь проблема: если страница памяти защищена, то её нельзя прочитать таким способом, но можно заменить PasswordChar(пример: поле ввода пароля в удаленном соединении) 
Author: Mikel
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01719