Anonymní profil Petr – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Petr – Programujte.comAnonymní profil Petr – Programujte.com

 

Příspěvky odeslané z IP adresy 89.102.229.–

Petr
Delphi › urči pořadí čísel
8. 2. 2008   #65329

A nebo si vytvor trimistne pole (nebo n+1 mistne pokud bys chtel i vice cisel), a ulozis nactene cislo na nultou pozici, pak setridis a zase zapises na nultou pozici dalsi cislo a opet setridis,..., a na konci bude na druhe pozici nejvetsi cislo a na prvni bude druhe nejvetsi...to co je na nultem uz nikoho nezajima

Petr
.NET › Otvírat soubory v již otevře…
29. 1. 2008   #64407

Pro ty, kteri by neco podobneho hledali:

 

struct COPYDATASTRUCT
{
public int dwData;
public int cbData;
public IntPtr lpData;
}

static class Program
{
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

public const int WM_COPYDATA = 0x004A;
[STAThread]
static void Main()
{
bool OK; //urcuje zda je spustena pouze jedna instance programu
System.Threading.Mutex m = new System.Threading.Mutex(true, "TMUTrackInformation", out OK);
if (!OK)
{
Process proces = Process.GetCurrentProcess();
Process[] procesy = Process.GetProcessesByName(proces.ProcessName);
for (int i = 0; i < procesy.Length;i++ )
{
if (procesy[i].Id!=proces.Id)
{
if (Environment.GetCommandLineArgs().Length == 2)
{
string cestaKOtviranemuSouboru = Environment.GetCommandLineArgs()[1];
COPYDATASTRUCT data = new COPYDATASTRUCT();
data.dwData = 0;
data.cbData = Encoding.Unicode.GetByteCount(cestaKOtviranemuSouboru) + 2;//+2 je na koncovou nulu
data.lpData = Marshal.StringToHGlobalUni(cestaKOtviranemuSouboru);
IntPtr pointerNaStrukturu = Marshal.AllocHGlobal(Marshal.SizeOf(data));
Marshal.StructureToPtr(data,pointerNaStrukturu,true);

SendMessage(procesy[i].MainWindowHandle, WM_COPYDATA, proces.MainWindowHandle,pointerNaStrukturu );
return;
}
}
}
MessageBox.Show("One instance of this program only!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
GC.KeepAlive(m);

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

}
}
}


A v hlavni aplikaci si hlidam smycku zprav:



[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void WndProc(ref Message m)
{
const int WM_COPYDATA = 0x004A;
switch(m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT nStruktura = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof (COPYDATASTRUCT));
string cesta = Marshal.PtrToStringUni(nStruktura.lpData);
//MessageBox.Show(cesta,"Mas tu zpravu",MessageBoxButtons.OK, MessageBoxIcon.Information);
NactiSoubor(cesta);
this.Activate();
break;
}
base.WndProc(ref m);

}

Petr
.NET › Otvírat soubory v již otevře…
26. 1. 2008   #64100

Tak jsem to nakonec vyresil. Pouzil jsem WM_COPYDATA a externi deklaraci funkce a posilam si mezi aplikacema zpravy - a funguje to vyborne :-) . Pokud by nekdo mel zajem tak muzu postnout.

Petr
.NET › Otvírat soubory v již otevře…
26. 1. 2008   #64082

Diky prostuduju si to.

Petr
.NET › Otvírat soubory v již otevře…
26. 1. 2008   #64060

Jak vytvorit aplikaci, tak aby se pustila jen jedna instance to vim, ale nevim jak predat te druhe aplikaci nazev toho souboru. (Pres zpravy mi to nejak nejde - asi to pisu spatne). Za ukazku bych byl vdecny.

Petr
.NET › Otvírat soubory v již otevře…
24. 1. 2008   #63933

Potřeboval bych poradit jak otevírat soubory (asociované) v jedné a té samé instanci aplikace, nikoli aby každý soubor otevřel svoje vlastní okno. Program je napsán v C#.

Příklad:
1. Spustím soubor A a otevře se aplikace AA
2. Spustím soubor B a v otevřené aplikaci AA se otevře soubor B (nějak, pravděpodobně dojde k předání informace o tom jaký soubor to chci vlastně otevřít).

V nejhorším případě by šlo původni aplikaci zavřít (i kdyz to take nevim jak) a novou otevřít - ale to je takové divné.

Nápady, rady, návody, odkazy?

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý