2010年4月27日 星期二

利用長尾夾收納電腦桌上所有的線(網路線、USB線、傳輸線)

利用長尾夾收納電腦桌上所有的線(網路線、USB線、傳輸線): "

David Rudolf Bakker是位相當有創意的生活家,喜歡用簡單方法解決複雜困難的問題,此次他利用便宜易取得的長尾夾輕鬆的將所有電腦桌上可能碰到的線都有條理的收納起來,特別針對插拔式的線路更能有效的利用空間,其做法如下圖。





圖片來自:http://lifehacking.nl/kantoor-tips/nooit-meer-je-usb-kabel-achter-het-bureau-verliezen-voor-e1/


"

Android手機也可以當無線分享器---Barnacle Wifi Tether

Android手機也可以當無線分享器---Barnacle Wifi Tether: "

之前有介紹過Windows Mobile有WMWifiRouter可以將手機模擬成無線分享器,其實Android手機也有WIFI Tether有類似功能的軟體,但是除了一定要ROOT以外還要更新通訊模組,像A688與Acer Liquid這種可以ROOT但沒辦法更新通訊模組的手機就沒辦法使用,這幾天在網路上看到一套不用更新通訊模組的無線分享軟體---Barnacle Wifi Tether可以在VIBO A688與ACER LIQUID使用的軟體,分享給大家,首先去Android Market搜尋'Barnacle'就可以找到Barnacle Wifi Tether:
nEO_IMG_01.jpgnEO_IMG_02.jpg
要執行Barnacle Wifi Tether一定要先ROOT才能使用。

安裝後執行,點選START就可以使用了:
nEO_IMG_03.jpgnEO_IMG_04.jpg

第一次使用時會出現權限提示,ROOT後請選擇'Always Allow',接著就開始執行了:
nEO_IMG_05.jpgnEO_IMG_06.jpg

使用iPhone測試看看,可以連線也可以上網:
IMG_0200.jpgIMG_0201.jpg

Barnacle Wifi Tether也可以設定SSID與連線密碼,只要點選手機的MENU鍵就會顯示SETTING:
nEO_IMG_07.jpg8.gif
▲可以修改SSID名稱,也可以在Wireless Security設定連線密碼。

可設定WEP密碼:
nEO_IMG_09.jpgnEO_IMG_11.jpg

這套軟體是免費的而且設定又簡單,推薦給大家。

"

2010年4月20日 星期二

调用“关闭Windows”窗口

调用“关闭Windows”窗口: "To programmatically shut down Windows, you can use the ShutdownWindows method.
[codes=delphi]uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
shell: Variant;
begin
shell := CreateOleObject('Shell.Application');
shell.ShutdownWindows;
end;[/codes]
Tags - , , "

Get EXE path from window handle

Get EXE path from window handle: "[codes=delphi]uses
PsAPI, TlHelp32;
const
RsSystemIdleProcess = 'System Idle Process';
RsSystemProcess = 'System Process';

function IsWinXP: Boolean;
begin
Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and
(Win32MajorVersion = 5) and (Win32MinorVersion = 1);
end;

function IsWin2k: Boolean;
begin
Result := (Win32MajorVersion >= 5) and
(Win32Platform = VER_PLATFORM_WIN32_NT);
end;

function IsWinNT4: Boolean;
begin
Result := Win32Platform = VER_PLATFORM_WIN32_NT;
Result := Result and (Win32MajorVersion = 4);
end;

function IsWin3X: Boolean;
begin
Result := Win32Platform = VER_PLATFORM_WIN32_NT;
Result := Result and (Win32MajorVersion = 3) and
((Win32MinorVersion = 1) or (Win32MinorVersion = 5) or
(Win32MinorVersion = 51));
end;

function RunningProcessesList(const List: TStrings; FullPath: Boolean): Boolean;

function ProcessFileName(PID: DWORD): string;
var
Handle: THandle;
begin
Result := '';
Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
if Handle <> 0 then
try
SetLength(Result, MAX_PATH);
if FullPath then
begin
if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
SetLength(Result, StrLen(PChar(Result)))
else
Result := '';
end
else
begin
if GetModuleBaseNameA(Handle, 0, PChar(Result), MAX_PATH) > 0 then
SetLength(Result, StrLen(PChar(Result)))
else
Result := '';
end;
finally
CloseHandle(Handle);
end;
end;

function BuildListTH: Boolean;
var
SnapProcHandle: THandle;
ProcEntry: TProcessEntry32;
NextProc: Boolean;
FileName: string;
begin
SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Result := (SnapProcHandle <> INVALID_HANDLE_VALUE);
if Result then
try
ProcEntry.dwSize := SizeOf(ProcEntry);
NextProc := Process32First(SnapProcHandle, ProcEntry);
while NextProc do
begin
if ProcEntry.th32ProcessID = 0 then
begin
FileName := RsSystemIdleProcess;
end
else
begin
if IsWin2k or IsWinXP then
begin
FileName := ProcessFileName(ProcEntry.th32ProcessID);
if FileName = '' then
FileName := ProcEntry.szExeFile;
end
else
begin
FileName := ProcEntry.szExeFile;
if not FullPath then
FileName := ExtractFileName(FileName);
end;
end;
List.AddObject(FileName, Pointer(ProcEntry.th32ProcessID));
NextProc := Process32Next(SnapProcHandle, ProcEntry);
end;
finally
CloseHandle(SnapProcHandle);
end;
end;

function BuildListPS: Boolean;
var
PIDs: array [0..1024] of DWORD;
Needed: DWORD;
I: Integer;
FileName: string;
begin
Result := EnumProcesses(@PIDs, SizeOf(PIDs), Needed);
if Result then
begin
for I := 0 to (Needed div SizeOf(DWORD)) - 1 do
begin
case PIDs[I] of
0:
FileName := RsSystemIdleProcess;
2:
if IsWinNT4 then
FileName := RsSystemProcess
else
FileName := ProcessFileName(PIDs[I]);
8:
if IsWin2k or IsWinXP then
FileName := RsSystemProcess
else
FileName := ProcessFileName(PIDs[I]);
else
FileName := ProcessFileName(PIDs[I]);
end;
if FileName <> '' then
List.AddObject(FileName, Pointer(PIDs[I]));
end;
end;
end;
begin
if IsWin3X or IsWinNT4 then
Result := BuildListPS
else
Result := BuildListTH;
end;

function GetProcessNameFromWnd(Wnd: HWND): string;
var
List: TStringList;
PID: DWORD;
I: Integer;
begin
Result := '';
if IsWindow(Wnd) then
begin
PID := INVALID_HANDLE_VALUE;
GetWindowThreadProcessId(Wnd, @PID);
List := TStringList.Create;
try
if RunningProcessesList(List, True) then
begin
I := List.IndexOfObject(Pointer(PID));
if I > -1 then
Result := List[I];
end;
finally
List.Free;
end;
end;
end; [/codes]
Tags - , , "