Переписал под хХарбор вышеприведенный исходник (не прошло и 9 месяцев), все получилось, но
как сделать чтоб параметр ОКНО: стало "Развернутое на весь экран"
Привожу исходник:
/*
* MINIGUI - Harbour Win32 GUI library Demo
*
* Copyright 2002-06 Roberto Lopez <roblez@ciudad.com.ar>
*
http://www.geocities.com/harbour_minigui/ *
* Copyright 2003-06 Grigory Filatov <gfilatov@freemail.ru>
*
* Добавил для xHarbour - Верченко Андрей Геннадьевич <30195@mail.ru>
*/
#define PROGRAM "Link Executor"
#define VERSION ' version 1.2 for xHarbour'
#define COPYRIGHT ' 2003-2006 by Grigory Filatov + Verchenko Andrey'
// Смотреть h_winapimisc.prg MINIGUI
#define CSIDL_PROGRAMS 0x0002 // Start Menu\Programs
#define CSIDL_PROGRAM_FILES 0x0026 // C:\Program Files
#define CSIDL_DESKTOPDIRECTORY 0x0010 // <user name>\Desktop
#define CSIDL_WINDOWS 0x0024 // GetWindowsDirectory()
#define CRLF CHR(13)+CHR(10)
#define FALSE .F.
#define TRUE .T.
#include "box.ch"
#include "inkey.ch"
#include "getexit.ch"
*--------------------------------------------------------*
FUNCTION Main()
*--------------------------------------------------------*
LOCAL CONTROL_2 := FALSE , CONTROL_3 := FALSE
Local GETLIST:={}, lCancel := TRUE, lOk := TRUE, nExitState := GE_ESCAPE
request HB_CODEPAGE_RU866
hb_setcodepage( "RU866" )
request HB_LANG_RU866
hb_langselect( "RU866" )
set( _SET_EVENTMASK, INKEY_ALL )
cls
SETMODE(15,40)
Setcolor('w/b+,r/b,g+/r,b+/r+,bg/n+,w/bg,rb/bg')
SETCOLOR("1/15,0/15,1/15,4/15,5/15,3/1,10/1,1/2")
dispbox( 4, 2, 7, 35, B_SINGLE_DOUBLE+" " )
@ 4, 5 SAY ' Create Link '
@ 5, 5 GET CONTROL_2 CHECKBOX CAPTION "On Desktop" color '0/15,15/0,0/15,1/14' MESSAGE "На Рабочем столе ?"
@ 6, 5 GET CONTROL_3 CHECKBOX CAPTION 'In "Start/Programs" Menu' color '0/15,15/0,0/15,1/14' MESSAGE "В меню Пуск/Программы ?"
@ 9, 10 GET lOk PUSHBUTTON ;
CAPTION " &Ok " ;
STATE { || GetActive():exitState := GE_WRITE } ;
WHEN { || nExitState := GE_WRITE, TRUE }
@ 9, 20 GET lCancel PUSHBUTTON ;
CAPTION "&Cancel" ;
STATE { || GetActive():exitState := GE_ESCAPE } ;
WHEN { || nExitState := GE_ESCAPE, TRUE }
READ MSG AT maxrow(), 0, maxcol() MSG Color "w/b+"
IF nExitState == 6
CreateLink(CONTROL_2, CONTROL_3)
ENDIF
return NIL
*--------------------------------------------------------*
Static Procedure CreateLink( lDesk, lMenu )
*--------------------------------------------------------*
Local cFileName := SUBSTR(EXENAME(), 1, RAT(".",EXENAME() ) - 1 ) + '.ini'
Local cDesktop := GetDesktopFolder()
LOCAL cMenuPrgs := GetSpecialFolder( CSIDL_PROGRAMS )
Local cLinkName := HB_OEMTOANSI("Калькулятор 1.0")
Local cExeName := IIF(OS_ISWINNT() == .T.,"%SystemRoot%\system32",GetWindowsFolder() ) + "\Calc.exe"
Local cIco := "", hIni
IF !FILE(cFileName)
hIni := Hash()
hIni["MAIN" ] := Hash()
hIni["MAIN" ]["Proga"] := PROGRAM
hIni["MAIN" ]["Ver" ] := VERSION
hIni["Options" ] := Hash()
hIni["Options" ]["LinkName"] := cLinkName
hIni["Options" ]["FileName"] := cExeName
HB_WriteIni( cFileName, hIni, ;
"; Start comment", "; End comment" )
ELSE
hIni := HB_ReadIni( cFileName )
cLinkName := hIni["Options"]["LinkName"]
cExeName := hIni["Options"]["FileName"]
ENDIF
cIco := cExeName
if lDesk
if CreateFileLink( cDesktop + "\" + cLinkName, cExeName, cFilePath(cExeName), cIco ) # 0
MsgStop( "Create Link Error!", PROGRAM, , .f. )
endif
endif
if lMenu
if CreateFileLink( cMenuPrgs + "\" + cLinkName, cExeName, cFilePath(cExeName), cIco ) # 0
MsgStop( "Create Link Error!", PROGRAM, , .f. )
endif
endif
Return
*--------------------------------------------------------*
Function MsgStop(x1,x2,x3,x4)
*--------------------------------------------------------*
ALERT( x2+"; ;"+x1)
RETURN NIL
* ---------------- я написал, может что не правильно, то поправте ------------*
Function GETWINDOWSDIR()
*-----------------------------------------------------------------------------*
local lfolder
lfolder:=getspecialfolder(CSIDL_WINDOWS)
return lfolder
*--------------------------------------------------------*
Function cFilePath( cPathMask ) // MINIGUI - h_controlmisc.prg
*--------------------------------------------------------*
LOCAL n := RAt( "\", cPathMask )
return If( n > 0, Upper( Left( cPathMask, n - 1) ), Left( cPathMask, 2 ) )
/*----------------------------------------------------------------------------
MINIGUI - Harbour Win32 GUI library source code
Copyright 2002 Roberto Lopez <roblez@ciudad.com.ar>
http://www.geocities.com/harbour_minigui/ Извлечено из h_winapimisc.prg MINIGUI
*/
Function GetWindowsFolder()
*-----------------------------------------------------------------------------*
local lfolder
lFolder := GETWINDOWSDIR()
return lfolder
Function GetDesktopFolder()
*-----------------------------------------------------------------------------*
local lfolder
lfolder:=getspecialfolder(CSIDL_DESKTOPDIRECTORY)
return lfolder
*-----------------------------------------------------------------------------*
*-----------------------------------------------------------------------------*
Function GETSPECIALFOLDER(nCSIDL) // Contributed By Ryszard Rylko
*-----------------------------------------------------------------------------*
Local RetVal
RetVal:= C_getspecialfolder(nCSIDL)
return RetVal
#pragma BEGINDUMP
#include <windows.h>
#include <commctrl.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"
#include <ShlObj.h>
/***************************************************************************\
* *
* Autor: Jose F. Gimenez (JFG) *
* <jfgimenez@wanadoo.es> <tecnico.sireinsa@ctv.es> *
* *
* Fecha: 2000.10.02 *
* *
\***************************************************************************/
void ChangePIF(LPCSTR cPIF)
{
UCHAR buffer[1024];
HFILE h;
long filesize;
strcpy(buffer, cPIF);
strcat(buffer, ".pif");
if ((h=_lopen(buffer, 2))>0)
{
filesize=_hread(h, &buffer, 1024);
buffer[0x63]=0x10; // Cerrar al salir
buffer[0x1ad]=0x0a; // Pantalla completa
buffer[0x2d4]=0x01;
buffer[0x2c5]=0x22; // No Permitir protector de pantalla
buffer[0x1ae]=0x11; // Quitar ALT+ENTRAR
buffer[0x2e0]=0x01;
_llseek(h, 0, 0);
_hwrite(h, buffer, filesize);
_lclose(h);
}
}
HRESULT WINAPI CreateLink(LPSTR lpszLink, LPSTR lpszPathObj, LPSTR lpszWorkPath, LPSTR lpszIco, int nIco)
{
long hres;
IShellLink * psl;
hres = CoInitialize(NULL);
if (SUCCEEDED(hres))
{
hres = CoCreateInstance(&CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, &IID_IShellLink, ( LPVOID ) &psl);
if (SUCCEEDED(hres))
{
IPersistFile * ppf;
psl->lpVtbl->SetPath(psl, lpszPathObj);
psl->lpVtbl->SetIconLocation(psl, lpszIco, nIco);
psl->lpVtbl->SetWorkingDirectory(psl, lpszWorkPath);
hres = psl->lpVtbl->QueryInterface(psl,
&IID_IPersistFile,
( LPVOID ) &ppf);
if (SUCCEEDED(hres))
{
WORD wsz[MAX_PATH];
char cPath[MAX_PATH];
strcpy(cPath, lpszLink);
strcat(cPath, ".lnk");
MultiByteToWideChar(CP_ACP, 0, cPath, -1, wsz, MAX_PATH);
hres = ppf->lpVtbl->Save(ppf, wsz, TRUE);
ppf->lpVtbl->Release(ppf);
// modificar el PIF para los programas MS-DOS
ChangePIF(lpszLink);
}
psl->lpVtbl->Release(psl);
}
CoUninitialize();
}
return hres;
}
/***************************************************************************/
HB_FUNC( CREATEFILELINK )
{
hb_retnl( (LONG) CreateLink( hb_parc(1), hb_parc(2), hb_parc(3), hb_parc(4),
(hb_pcount() > 4) ? hb_parni(5) : 0) );
}
#pragma ENDDUMP
#pragma BEGINDUMP
// из MINIGUI
#include <windows.h>
#include <hbapi.h>
#include <shlobj.h>
HB_FUNC( C_GETSPECIALFOLDER ) // Contributed By Ryszard Ry№ko
{
char *lpBuffer = (char*) hb_xgrab( MAX_PATH+1);
LPITEMIDLIST pidlBrowse; // PIDL selected by user
SHGetSpecialFolderLocation(GetActiveWindow(), hb_parni(1), &pidlBrowse) ;
SHGetPathFromIDList(pidlBrowse, lpBuffer);
hb_retc(lpBuffer);
hb_xfree( lpBuffer);
}
#pragma ENDDUMP