Windows Form OnTop

8 czerwca 2010

miałem taki problem aby wychwycić czy okno formularza windows jest najwyższe w hierarchii okien otworzonych na pulpicie. w c# nie było metody aby to zrobić. kłania się winAPI ;)

jakby kogoś interesowało oto rozwiązanie:

public void AmIOnTop()
{
public void AmIOnTop()
{ List windowNames = new List();
IntPtr ptr = this.Parent.Handle;
int zIndex = 0;
IntPtr desktop = IntPtr.Zero;// GetDesktopWindow();
IntPtr a = new IntPtr();
a = GetTopWindow(desktop);while (true)
{
if (a == desktop)
return;
if (a == ptr)
break;
a = GetWindow(a, GetWindow_Cmd.GW_HWNDNEXT);
if (IsWindowVisible(a))
{
int length = GetWindowTextLength(a);
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(a, sb, sb.Capacity);
windowNames.Add(sb.ToString()+ " "+a.ToString()+ " zIndex->"+zIndex.ToString());
if (sb.Length > 0 && sb.ToString() != "Start")
{
zIndex++;

}
}
}
if (zIndex == 1)
{
//MessageBox.Show("+");
onTop = true;
return;
}
else
{
return;
}

}

słów kilka komentarza:

po pierwsze metoda była odpalana z osobnego wątek dlatego jest void a nie bool,  w kodzie programu musi być coś takiego::

private bool onTop = false;

albo przerobić ją na bool i po zabawie.

no i najważniejsze to import z user32.dll do c#::

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
static extern IntPtr GetTopWindow(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);enum GetWindow_Cmd : uint
{
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}

no i najważniejsze po drugie::while (!(onTop && mainFormCompleated))to nie to samo cowhile (!onTop && !mainFormCompleated)

;)

see U

Wielkie nie dla pochowania Pana Prezydenta Kaczyńskiego na Wawelu

13 kwietnia 2010

Poruszony rozmiarem tragedii ludzi którzy zginęli w kasastrofie samolotu prezydenckiego w Smoleńsku obdarzyłem postać Pana Prezydenta czymś na cień sympatii, starsznie żałuje tego że zostałem w taki brutalny sposób obdarty z niej poprzez to co usłyszałem dzisiaj. Paranoidalny pomysł pochowania Pana Kaczyńskiego na Wawelu nie tylko nie doda Mu splendoru, a wydaje się być tą kroplą która przepełni czarę. Oczywiście tym razem nie jest to Jego wina, należy tu raczej skierować oczy n.a Tych Innych. Proponuję aby wszyscy nie zgadzający się z tą decyzją wyrazili sprzeciw wysyłając mail tu kontakt@kprm.gov.pl

W całej tej sprawie szczerze szkoda mi córki Pary Prezydenckiej, która w tak strasznym dla Niej czasie musi być świadkiem rodzącej się dyskusji, która nie musiała mieć miejsca, gdyby Parę Prezydencką pochowano na Powązkach.

Wydarzenie, które na chwilę połączyło cały Naród, poprzez pochopne i nie konsultowane ze społeczeństwem decyzje, znowu nas niestety podzieli. Co już widać że się dzieje.

W momencie w którym zaproszeni na pogrzeb goście, wybitni politycy zagraniczni, dowiedzą się o czymś co zdecydowanie przeistoczy się w spór, w takim czasie, co sobie o Nas pomyślą ?

Czy na pewno przyjadą ?

Oczywiście dobrze by było stworzyć pismo i się pod nim podpisać, tak by można było je złożyć na dziennik podawczy, bo wydaję mi się że maile zostaną zignorowane.

Linki::

http://www.petycje.pl/petycjePodglad.php?petycjeid=5181

http://www.facebook.com/pages/NIE-dla-pochowania-Kaczynskich-na-Wawelu/108910729145050?v=wall

http://wyborcza.pl/1,75248,7767881,Lech_Kaczynski_spocznie_na_Wawelu___komentarze.html

najnowsze linki do zagranicznych komentarzy w tej sprawie::

http://www.reuters.com/article/idUSTRE63D18S20100414

http://online.wsj.com/article/SB10001424052702303695604575181463742973110.html

http://www.nytimes.com/2010/04/14/world/europe/14poland.html

dell mini 9 i linux na karcie SD we wbudowanym czytniku.

28 marca 2010

To jest dopiero poczatek tego tekstu. Generalnie chodzi o to ze dziele netbook’a Dell Mini 9 z druga osoba a ona nie przepada za zmianami na komputerze, na nim jest ms windows xp a ja lubie linux’y :)
na wbudowanym hdd nie ma miejsca na jeden system co dopiero na dwa ( 8GB ) wiec wpadlem na pomysl by postawic linux’a ( Mint 8 ) na karcie SD i wstawic ja do wbudowanego czytnika.
Ladnie i elegancko, bez wystajacych pendrive’ow z boku komputerka.
Tym bardziej ze netbook z gwizdkiem z boku wyglada komicznie :)
problem rozwiazany, pomimo ze bios mini 9 nie ma opcji boot z wbudowanego czytnika SD tylko via USB ;(
ale o tym napisze pozniej, teraz nie mam weny ;)

ps. przepraszam za brak polskich fontow, pisane na Mini 9 a tam nie ma… prawego ALT’a musze jakos to rozpracowac ;)

winAPI + asm

8 stycznia 2010

no więc nie chce rzucać mięsem ale chyba nie długo będę… problem jest banalny napisać aplikację winAPI robiącą nic.

z pięć kliknięć w Visual Studio, dowolnym, tak na prawdę średnio rozgarnięta osoba wiedząca co to jest Windows to zrobi w godzinę.

tylko zrób to w asemblerze.

o coś takiego::

;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;       Dolphinz’s win32ASM Tutorial 3
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
.386p                                   ; use 80386 instructions set
.model flat, stdcall                    ; memory model I want to use
include  win32.inc
%list                    ; my win32 include file
extrn           GetModuleHandleA: PROC
extrn           LoadIconA       : PROC
extrn           LoadCursorA     : PROC
extrn           RegisterClassA  : PROC
extrn           CreateWindowExA : PROC
extrn           PostQuitMessage : PROC
extrn           GetMessageA     : PROC
extrn           TranslateMessage: PROC
extrn           DispatchMessageA: PROC
extrn           DefWindowProcA  : PROC
extrn   DialogBoxParamA : PROC
extrn           ExitProcess     : PROC
extrn           ShowWindow      : PROC
extrn           UpdateWindow    : PROC
extrn EndDialog : PROC
DialogBoxParam   equ <DialogBoxParamA>
ID_ICON         equ     100             ; My icon, as defined in resource file
IDR_MENU        equ     200             ; and here is my menu identifier.
IDM_EXIT        equ     300
IDD_DIALOG1     equ 103
IDD_ABOUTBOX    equ 2001
IDM_ABOUT equ 400
TRUE     equ     1
FALSE     equ     0
IDOK     = 1
IDCANCEL = 2
.DATA
msg             MSG             <?>
wc           WNDCLASS     <?>
;========== Handles
hMain           dd      0               ; handle for main window
hInst           dd      0               ; handle Instance
;========== Strings
szProgName      db      ’Tutorial 3 – Using Resources’,0
szMainClass     db      ’MENUASM’,0
.CODE
;—————————————————————————–
start:                                  ; Entrypoint
call    GetModuleHandleA, 0
mov     hInst, eax
mov     [wc.style], CS_HREDRAW + CS_VREDRAW
mov     [wc.lpfnWndProc], offset WndProc
mov     [wc.cbClsExtra], 0
mov     [wc.cbWndExtra], 0
mov     eax, [hInst]
mov     [wc.hInstance], eax
call    LoadIconA, hInst, ID_ICON               ; Load icon I want to use
mov     [wc.hIcon], eax
call    LoadCursorA, 0, IDC_ARROW               ; Load default cursor
mov     [wc.hCursor], eax
mov     [wc.hbrBackground], COLOR_WINDOW + 1
mov     dword ptr [wc.lpszMenuName], IDR_MENU   ; My menu resource
mov     dword ptr [wc.lpszClassName], offset szMainClass
push    offset wc
call    RegisterClassA
call    CreateWindowExA, 0, offset szMainClass, offset szProgName,\
WS_VISIBLE OR WS_CAPTION OR WS_SYSMENU OR WS_THICKFRAME,\
100,50,300,100,0,0, hInst, 0
mov hMain, eax
call    ShowWindow, hMain, SW_SHOWNORMAL
call    UpdateWindow, hMain
msg_loop:
call    GetMessageA, offset msg, 0, 0, 0
cmp     ax, 0
je      end_loop
call    TranslateMessage, offset msg
call    DispatchMessageA, offset msg
jmp     msg_loop
end_loop:
call    ExitProcess, 0
;—————————————————————————–
WndProc         proc    Hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
movzx   eax,    WORD PTR wmsg
.if     eax == WM_DESTROY
jmp     wmdestroy
.elseif eax== WM_COMMAND
jmp     wmcommand
.else
call    DefWindowProcA, Hwnd, wmsg, wparam, lparam
jmp     @@End
.endif
xor     eax, eax
@@End:
ret
wmcommand:
mov     eax, [wparam]
cwde
cmp     eax, IDM_EXIT
je      wmdestroy
cmp     eax, IDM_ABOUT
je      idmabout
xor     eax, eax
ret
wmdestroy:
call    PostQuitMessage, 0
xor     eax, eax
ret
idmabout:
push    0               ;LPARAM to pass to dialog
push    offset AboutDlg ;DLGPROC lpDialogFunc
push    [hwnd]          ;window handle of this window
push    IDD_ABOUTBOX    ;Dialog ID
push    [hInst]         ;Module Instance
call    DialogBoxParam  ;Invoke Dialog
jmp     return0
WndProc         endp
public  WndProc
;*******************************************************************
;*  ABOUTBOX DIALOG PROCEDURE                                      *
;*******************************************************************
AboutDlg proc    hdlg:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
cmp     [wmsg],WM_COMMAND ;Is message is a WM_COMMAND?
jne     MyDlgDone       ;No, then just return
mov     eax,[wparam]    ;Otherwise, see if it’s OK or CANCEL
cmp     eax,IDOK        ;That was pressed
je      @@1             ;and if not either of these
cmp     eax,IDCANCEL    ;then just
jne     AboutDone       ;return
@@1:     push    [wparam]        ;terminate with wparam as the return
push    [hdlg]          ;handle of the dialog
call    EndDialog       ;end the dialog
mov     eax,TRUE        ;return
jmp     AboutRet        ;with TRUE
AboutDone:
mov     eax,FALSE       ;return with FALSE
AboutRet:
ret                     ;return
AboutDlg endp
public   AboutDlg
MyDlgDone:
mov     eax,FALSE       ;return with FALSE
return0: xor     eax,eax
;——————————————————-
end start

.386p                                   ; use 80386 instructions set

.model flat, stdcall                    ; memory model I want to use

include  win32.inc

%list                    ; my win32 include file

extrn           GetModuleHandleA: PROC

extrn           LoadIconA       : PROC

extrn           LoadCursorA     : PROC

extrn           RegisterClassA  : PROC

extrn           CreateWindowExA : PROC

extrn           PostQuitMessage : PROC

extrn           GetMessageA     : PROC

extrn           TranslateMessage: PROC

extrn           DispatchMessageA: PROC

extrn           DefWindowProcA  : PROC

extrn   DialogBoxParamA : PROC

extrn           ExitProcess     : PROC

extrn           ShowWindow      : PROC

extrn           UpdateWindow    : PROC

extrn EndDialog : PROC

DialogBoxParam   equ <DialogBoxParamA>

ID_ICON         equ     100             ; My icon, as defined in resource file

IDR_MENU        equ     200             ; and here is my menu identifier.

IDM_EXIT        equ     300

IDD_DIALOG1     equ 103

IDD_ABOUTBOX    equ 2001

IDM_ABOUT equ 400

TRUE     equ     1

FALSE     equ     0

IDOK     = 1

IDCANCEL = 2

.DATA

msg             MSG             <?>

wc           WNDCLASS     <?>

;========== Handles

hMain           dd      0               ; handle for main window

hInst           dd      0               ; handle Instance

;========== Strings

szProgName      db      ’Tutorial 3 – Using Resources’,0

szMainClass     db      ’MENUASM’,0

.CODE

;—————————————————————————–

start:                                  ; Entrypoint

call    GetModuleHandleA, 0

mov     hInst, eax

mov     [wc.style], CS_HREDRAW + CS_VREDRAW

mov     [wc.lpfnWndProc], offset WndProc

mov     [wc.cbClsExtra], 0

mov     [wc.cbWndExtra], 0

mov     eax, [hInst]

mov     [wc.hInstance], eax

call    LoadIconA, hInst, ID_ICON               ; Load icon I want to use

mov     [wc.hIcon], eax

call    LoadCursorA, 0, IDC_ARROW               ; Load default cursor

mov     [wc.hCursor], eax

mov     [wc.hbrBackground], COLOR_WINDOW + 1

mov     dword ptr [wc.lpszMenuName], IDR_MENU   ; My menu resource

mov     dword ptr [wc.lpszClassName], offset szMainClass

push    offset wc

call    RegisterClassA

call    CreateWindowExA, 0, offset szMainClass, offset szProgName,\

WS_VISIBLE OR WS_CAPTION OR WS_SYSMENU OR WS_THICKFRAME,\

100,50,300,100,0,0, hInst, 0

mov hMain, eax

call    ShowWindow, hMain, SW_SHOWNORMAL

call    UpdateWindow, hMain

msg_loop:

call    GetMessageA, offset msg, 0, 0, 0

cmp     ax, 0

je      end_loop

call    TranslateMessage, offset msg

call    DispatchMessageA, offset msg

jmp     msg_loop

end_loop:

call    ExitProcess, 0

;—————————————————————————–

WndProc         proc    Hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD

movzx   eax,    WORD PTR wmsg

.if     eax == WM_DESTROY

jmp     wmdestroy

.elseif eax== WM_COMMAND

jmp     wmcommand

.else

call    DefWindowProcA, Hwnd, wmsg, wparam, lparam

jmp     @@End

.endif

xor     eax, eax

@@End:

ret

wmcommand:

mov     eax, [wparam]

cwde

cmp     eax, IDM_EXIT

je      wmdestroy

cmp     eax, IDM_ABOUT

je      idmabout

xor     eax, eax

ret

wmdestroy:

call    PostQuitMessage, 0

xor     eax, eax

ret

idmabout:

push    0               ;LPARAM to pass to dialog

push    offset AboutDlg ;DLGPROC lpDialogFunc

push    [hwnd]          ;window handle of this window

push    IDD_ABOUTBOX    ;Dialog ID

push    [hInst]         ;Module Instance

call    DialogBoxParam  ;Invoke Dialog

jmp     return0

WndProc         endp

public  WndProc

;*******************************************************************

;*  ABOUTBOX DIALOG PROCEDURE                                      *

;*******************************************************************

AboutDlg proc    hdlg:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD

cmp     [wmsg],WM_COMMAND ;Is message is a WM_COMMAND?

jne     MyDlgDone       ;No, then just return

mov     eax,[wparam]    ;Otherwise, see if it’s OK or CANCEL

cmp     eax,IDOK        ;That was pressed

je      @@1             ;and if not either of these

cmp     eax,IDCANCEL    ;then just

jne     AboutDone       ;return

@@1:     push    [wparam]        ;terminate with wparam as the return

push    [hdlg]          ;handle of the dialog

call    EndDialog       ;end the dialog

mov     eax,TRUE        ;return

jmp     AboutRet        ;with TRUE

AboutDone:

mov     eax,FALSE       ;return with FALSE

AboutRet:

ret                     ;return

AboutDlg endp

public   AboutDlg

MyDlgDone:

mov     eax,FALSE       ;return with FALSE

return0: xor     eax,eax

;——————————————————-

end start

to tak jakby ktoś nie wiedział jak wygląda asembler

no to powodzenia.

DOS + Borland C++ 3.1 + Windows 98 SE

28 listopada 2009

Dzisiaj chciałem wskazać drogę do pisania programów c++ korzystających ze starszych bibliotek w tym dos.h.

Jest to może problem czysto akademicki, ale hmm czasami się przydaje, chociaż na przedmiotach typu Programowanie Na Poziomie Sprzętu, gdzie wymagane jest tworzenie oprogramowania na dos, a kto ma jeszcze dos’a ;)

Zaczynamy.

Aby móc działać w dos, potrzebny jest nam emulator dos’a ja posłużę się tym projektem:

http://www.dosbox.com/

po instalacji w naszym natywnym systemie i uruchomieniu aplikacji musimy sobie dodać jeden katalog z naszego systemu jako dysk np C: w dosbox’ie

ustalmy np że będzie to /home/user/dosbox

wydajemy w dosbox’ie polecenie:

mount  c /home/user/dosbox

w tym momencie po pierwsze katalog musi istnieć, po drugie nic tam nie ma więc zmieniając ścieżkę na C:\ w dosbox’ie i po komendzie DIR nie zobaczymy nic.

Potrzebne nam pliki:

kompilator Borland C++ 3.1 oraz system Windows 98SE zainstalowany

oraz jak by się kto chciał pobawić windowsem 98SE to

Windows 98 SE Install

Po rozpakowaniu paczki z kompilatorem kopiujemy wszystkie pliki do naszego folderu /home/user/dosbox i odpalamy instalację Borlad C++ 3.1 poprzez cd BC31 i install.exe

Nie będę się wdawał w proces instalacji Borlanda jest on dosyć klarowny, Windows w katalogu C:\WINDOWS jest potrzebny Borlandowi, i po to mniej więcej umieściłem go w paczce. Tylko nie próbujcie uruchomić 98 w dosbox’ie ;) albo spróbujcie i dajcie znać co wyszło ;)

Jak już zainstalowaliśmy Borlanda to uruchamiamy go poprzez cd BORLANDC\BIN i bc.exe

Mamy gotowe środowisko do pisania ciekawych programów w c++ z wykorzystaniem 16 bitowego trybu pracy procesora. Przynajmniej w teorii, niektóre programy, np modyfikacji przerwań systemowych nie chciały mi działać poprawnie, pomimo poprawnej implementacji w c++

Powodzenia ;)

Fujitsu Simens Amilo Li2727 + Fedora 11 + wifi

7 listopada 2009

Przez pewien czas nie mogłem się cieszyć swobodą WiFi na moim FSimens w połączeniu z systemem Fedora, gdyż nie wykrywał on karty Atheros 5007G. Tak myślałem. Aż natrafiłem na banalne rozwiązanie: w komputerze tym włączenie interfejsu wifi realizowane jest przez F1 + Fn. No cóż, standard. Owszem, tylko w TYM komputerze nie uruchamia ta kombinacja karty, tylko program, oczywiście Windows’owy. Więc siłą rzeczy nie działa on poprawnie pod GNU/Linux. Ale rozwiązanie jest, całkiem hmmm banalne pod warunkiem, że dysponujesz w Swojej dystrybucji kernelem powyżej 2.6.25.

Istnieje moduł jądra, acer-wmi, stworzony do obsługi takich ‘guziczków’ na sprzęcie acer’a. Na innych komputerach wystarczy go.. włączyć:

modprobe acer-wmi

oczywiście jako root

i już

red hat 9 + kernel 2.6.30.1

13 lipca 2009

dostałem w spadku komputer, a w zasadzie to nie w spadku tylko jako wyraz zaufania od znajomego, bardziej na przetrzymanie i może jakieś wykorzystanie. będzie robił za bramę sieciową. ponieważ sprzęt jest mocno ambitny nie chciał nawet przyjąć liveCD Fedora 10 więc postawiłem na nim… Red Hat Linux w wersji 9. tak tak takie cudo z 2003 no a ponieważ jajko można zmienić pokusiłem się na update kernela do… 2.6.30.1 czyli najnowszego stabilnego. Na chwilę pisania tych słów cały czas trwa make install kernela więc ciężko mówić o efektach na razie trwa ;) o efektach jeszcze napiszę…

cdn…

overflow:hidden; w połączeniu z tagiem <iframe>

10 lipca 2009

no było gorąco, potrzebowałem zachować do tego projektu efekt uciekają…cego div poza obszar iframe. taki patent z wysuwanymi elementami menu. standardowo jak javascript przesuwał element poza obszar iframe pojawiał się taaaaki piękny scroll że aż miło, no więc css i overflow:hidden;

super, tylko jedna przeglądarka zrozumiała moje intencję i chwała jej za to, był to niezawodny firefox 3.5 wszystkie inne łącznie z chrome ignorowały mnie w tej materii i pokazywały kochanego scroll’a. zdziwiłem się gdyż do tego że IE robi co chce z css to sie przyzwyczaiłem a tu takie bubu. no więc spędziłem kilka ładnych godzin zastanawiając się nad bublem, i nic.

dopiero dzisiaj rano pomyślałem i sprawdziłem właściwości tagu <iframe> gdzie jak byk jest napisane:

The frameborder attribute specifies whether or not to display a border around an iframe.

ale poniżej stoi:

Tip: For practical reasons, it may be better not to specify borders, and use CSS to apply border styles and color instead.

no cóż niezbadane są pomysły programistów