mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-14 10:02:10 +08:00
199 lines
4.6 KiB
ObjectPascal
199 lines
4.6 KiB
ObjectPascal
unit IpcMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, ExtCtrls, ComCtrls, MysqlQueryThread, MysqlQuery, IpcSession;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
Panel2: TPanel;
|
|
StatusBar1: TStatusBar;
|
|
pnMain: TPanel;
|
|
pnWindowList: TPanel;
|
|
Panel3: TPanel;
|
|
Panel5: TPanel;
|
|
Panel6: TPanel;
|
|
Panel7: TPanel;
|
|
lvWindows: TListView;
|
|
Label2: TLabel;
|
|
Button2: TButton;
|
|
Splitter1: TSplitter;
|
|
Panel4: TPanel;
|
|
Memo1: TMemo;
|
|
Button3: TButton;
|
|
Label3: TLabel;
|
|
Button4: TButton;
|
|
Button5: TButton;
|
|
pnSessionSettings: TPanel;
|
|
Label1: TLabel;
|
|
edConnName: TEdit;
|
|
Button1: TButton;
|
|
Label5: TLabel;
|
|
CheckBox1: TCheckBox;
|
|
procedure CheckBox1Click(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure lvWindowsDblClick(Sender: TObject);
|
|
procedure Button5Click(Sender: TObject);
|
|
procedure Button4Click(Sender: TObject);
|
|
procedure Button3Click(Sender: TObject);
|
|
procedure Button2Click(Sender: TObject);
|
|
procedure Button1Click(Sender: TObject);
|
|
procedure SessOpened(Sender: TObject);
|
|
procedure SessClosed(Sender: TObject);
|
|
private
|
|
FSess : TIpcSession;
|
|
function AssembleConnParams: TOpenConnProf;
|
|
public
|
|
procedure HandleWMCopyData(var msg: TWMCopyData); message WM_COPYDATA;
|
|
procedure DumpWindowList();
|
|
procedure DebugWrite(AMsg : String);
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
uses communication, synchronization, threading, helpers;
|
|
|
|
{$R *.dfm}
|
|
|
|
{ TForm1 }
|
|
|
|
procedure TForm1.Button1Click(Sender: TObject);
|
|
begin
|
|
FSess.Name := edConnName.Text;
|
|
DumpWindowList();
|
|
end;
|
|
|
|
procedure TForm1.Button2Click(Sender: TObject);
|
|
begin
|
|
DumpWindowList();
|
|
end;
|
|
|
|
procedure TForm1.Button3Click(Sender: TObject);
|
|
begin
|
|
CheckForCrashedWindows();
|
|
DumpWindowList();
|
|
end;
|
|
|
|
procedure TForm1.Button4Click(Sender: TObject);
|
|
begin
|
|
if FSess.Open(True,edConnName.Text) then
|
|
begin
|
|
end;
|
|
|
|
DumpWindowList();
|
|
end;
|
|
|
|
procedure TForm1.Button5Click(Sender: TObject);
|
|
begin
|
|
FSess.Close();
|
|
end;
|
|
|
|
procedure TForm1.CheckBox1Click(Sender: TObject);
|
|
begin
|
|
FSess.ConnectedFlag := CheckBox1.Checked;
|
|
end;
|
|
|
|
procedure TForm1.DebugWrite(AMsg: String);
|
|
begin
|
|
Memo1.Lines.Add(AMsg);
|
|
end;
|
|
|
|
procedure TForm1.DumpWindowList;
|
|
var
|
|
wda : TWindowDataArray;
|
|
i : Integer;
|
|
li : TListItem;
|
|
begin
|
|
lvWindows.Items.BeginUpdate();
|
|
lvWindows.Items.Clear();
|
|
|
|
wda := GetWindowList();
|
|
for i := Low(wda) to High(wda) do
|
|
begin
|
|
li := lvWindows.Items.Add();
|
|
li.Caption := Format('%d',[i]);
|
|
li.SubItems.Add(Format('%d',[wda[i].AppHandle]));
|
|
li.SubItems.Add(wda[i].Name);
|
|
li.SubItems.Add(Format('%d',[Ord(wda[i].Connected)]));
|
|
//DebugWrite(Format('%d -- Handle: %d Name: %s',[i,wda[i].AppHandle,wda[i].Name]));
|
|
end;
|
|
|
|
|
|
lvWindows.Items.EndUpdate();
|
|
end;
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
begin
|
|
FSess := TIpcSession.Create(Self,Handle);
|
|
FSess.OnOpened := SessOpened;
|
|
FSess.OnClosed := SessClosed;
|
|
end;
|
|
|
|
procedure TForm1.FormDestroy(Sender: TObject);
|
|
begin
|
|
FreeAndNil (FSess);
|
|
end;
|
|
|
|
procedure TForm1.HandleWMCopyData(var msg: TWMCopyData);
|
|
var
|
|
method: DWORD;
|
|
begin
|
|
// extract info from message
|
|
method := msg.CopyDataStruct^.dwData;
|
|
|
|
// display
|
|
DebugWrite(Format('WM_COPYDATA received; method=%d',[method]));
|
|
|
|
if method in [CMD_EXECUTEQUERY_NORESULTS,CMD_EXECUTEQUERY_RESULTS] then
|
|
DebugWrite(Format('Request: %d -- Query: %s',[GetRequestIdFromMsg(msg),GetQueryFromMsg(msg)]));
|
|
|
|
|
|
// release
|
|
ReleaseRemoteCaller(ERR_UNSPECIFIED);
|
|
end;
|
|
|
|
procedure TForm1.lvWindowsDblClick(Sender: TObject);
|
|
var
|
|
h : THandle;
|
|
begin
|
|
if lvWindows.Selected<>nil then
|
|
begin
|
|
h := StrToIntDef(lvWindows.Selected.SubItems[0],0);
|
|
|
|
if h<>0 then
|
|
ActivateWindow(h);
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.SessClosed(Sender: TObject);
|
|
begin
|
|
DebugWrite('Ipc session closed');
|
|
pnWindowList.Enabled := False;
|
|
end;
|
|
|
|
procedure TForm1.SessOpened(Sender: TObject);
|
|
begin
|
|
DebugWrite('Ipc session opened');
|
|
pnWindowList.Enabled := True;
|
|
end;
|
|
|
|
function TForm1.AssembleConnParams: TOpenConnProf;
|
|
begin
|
|
ZeroMemory(@Result,SizeOf(Result));
|
|
Result.MysqlParams.Host := 'localhost';
|
|
Result.MysqlParams.Database := 'test';
|
|
Result.MysqlParams.Protocol := 'mysql';
|
|
Result.MysqlParams.User := 'root';
|
|
Result.MysqlParams.Pass := '';
|
|
Result.MysqlParams.Port := StrToIntDef('',3306);
|
|
end;
|
|
|
|
|
|
end.
|