Shell v C++ 2.díl

Diskuze čtenářů k článku

Ladislav Zezula  |  28. 12. 2001 10:29  | 

Když jsem kdysi použil funkci ShellExecuteEx ve WinNT 4.0 a předal jí neasociovaný soubor, funkce vrátila chybu ERROR_NO_ASSOCIATION (v souladu s dokumentací ve Windows). Nevíte, jak donutit WinNT 4.0, aby zobrazily stejný dialog, který zobrazí Explorer a kde má uživatel možnost vybrat a přiřadit tomuto souboru nějakou aplikaci ?

Například program Windows Commander zobrazí ve WinNT 4.0 chybu "Se souborem %s nebyl asociován žádný program !" a následně otevře asociační dialog. (Později jsem stejnou věc zkoušel ve Win2000 a dialog už se zobrazil, stejně tak Windows Commander nezobrazil hlášku o chybějící asociaci).

Soubor jsem spouštěl takto :

    SHELLEXECUTEINFO sei;

    // Fill the shell execute structure
    ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
    sei.cbSize = sizeof(SHELLEXECUTEINFO);
    sei.fMask  = SEE_MASK_NOCLOSEPROCESS;
    sei.hwnd   = hWnd;
    sei.lpFile = _T("File.lib");
    sei.nShow  = SW_SHOW;

    // Execute the file and wait until the process ends
    ShellExecuteEx(&sei);

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petr  |  28. 12. 2001 15:52  | 

function ShellOpenWith(const FileName: string): Boolean;
var
  Se: TShellExecuteInfo;
  Param: string;
begin
  Param := Format('shell32.dll,OpenAs_RunDLL %s', [FileName]);
  FillChar(Se, Sizeof(Se), 0);
  Se.cbSize := Sizeof(Se);
  Se.lpFile := 'rundll32.exe';
  Se.lpParameters := PChar(Param);
  Se.nShow := SW_SHOWNORMAL;
  Result := ShellExecuteEx(@Se);
end;

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ladislav Zezula  |  28. 12. 2001 16:04  | 

Diky !!!

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petr Necas  |  30. 12. 2001 00:39  | 

Zdravim,

jsouc clovek pomerne klidny, nadpis clanku me dost namichnul. Copak tohle je C++? Pokud ano, necht mi autor najde treba ShellExecuteEx   v ANSI C++ ((. Ach jo, kdy vlastne lidi zacnou odlisovat ANSI C++ od patvaru jako Microsoft Visual C++, Borland Builder C++ .... kdyz ani autori si to nehlidaji.

Nu coz, neda se asi nic delat

Souhlasím  |  Nesouhlasím  |  Odpovědět
Radek Chalupa  |  30. 12. 2001 12:44  | 

1. Vážený pane kolego, na podobnou připomínku jsem zde již odpovídal -NADPIS ČLÁNKU UPRAVUJE REDAKCE. A to C++ tam bylo přidáno zřejmě z důvodu "rubrikování". S přpomínkami se obraťe na redakci. Mnou odeslaný článek měl napis "Shell II.". Najdete jej také (v původní podobě) na mých stránkách zde: http://www.radekchalupa.cz/tools/clanek.asp?page=developer\visual_cpp\clanky\2001\shell_2.htm

2. Když pominu Vaše označení Microsoft Visual C++ (což je vývojové prostředí, nikoli programovací jazyk - rozdíl pro Vás možná zanedbatelný), tak ShellExecuteEx není ani C++, ani Visual C++, ani C++ Builder, nýbrž WinAPI. Což je programové rozhraní Windows, které můžete volat i z jiného programovacího jazyka, a nemá tady s C++ co do činění.

Radek Chalupa

Souhlasím  |  Nesouhlasím  |  Odpovědět
PaJaSoft  |  07. 01. 2002 09:34  | 

Chcete rici, ze MFC aplikaci, kterou mi par klikama vygeneruje MS Visual C++ prostredi (IDE) zkompiluji kompilatorem, ktery zna pouze ANSI C a ANSI C++ standard a nikoli patrvary od MS? MS VC++ je primarne IDE, ale aby mohlo byt IDE dle idei MS ma spoustu rozsireni, ktere nemaji nikde a zadnou oporu....

Souhlasím  |  Nesouhlasím  |  Odpovědět
Radek Chalupa  |  07. 01. 2002 10:00  | 

1. Funkci ShellExecuteEx můžete použít jak v MFC aplikaci, tak v řekněme Win32 aplikaci, tedy aplikaci psanou v "čistém API", kterou samozřejmě v IDE Visual C++ můžete také běžně vytvořit a použít.

2. Mluvíme o programování pod Windows, to znamená, že musíte mít k disposici příslušné SDK, tedy alespoň ty základní knihovny a hlavičkové soubory, konkrétně windows.h a shlobj.h. Bez Win API samozřejmě tuto funkci nemůžete použít, ale bez Win API samozřejmě neudělátě žádnou aplikaci pro Windows. Tedy když do Win32 aplikce (bez MFC) vložíte zmíněné hlavičkové soubory, budete mít k disposici příslušné knihovny (nemusíte ani krást, Windows SDK je ke stažení zdarma ) tak samozřejmě porgram, který používá funkci ShellExecuteEx přeložíte!!

3. Mezi céčkaři je dnes jednoznačně nejpoužívanější vývojové prostředí Visual C++ (myslím mezi céčkaři, kteří vyvíjejí pro Windows), takže i když nevím co konkrétně máte na mysli těmi rozšířeními.....ale oporu určitě mají.

Radek Chalupa - www.radekchalupa.cz

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
jan novak  |  25. 07. 2005 15:20  | 

Lze nejakym parametrem provest tisk pres shell BEZ dialogu Nastaveni tiskaren...ktery ceka na kliknuti od uzivatele???
Diky !!!!
 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor
Aktuální číslo časopisu Computer

Megatest: 20 powerbank s USB-C

Test: mobily do 3 500 Kč

Radíme s výběrem routeru

Tipy na nejlepší vánoční dárky