Új hozzászólás Aktív témák
-
fatal`
titán
válasz pmonitor #9500 üzenetére
Akkor most olvasd el mégegyszer a kiindulást adó kérdést/problémát.
A designer által generált fájlba nem írunk bele. Erre jössz azzal, hogy nincs rá feltétlenül szükség. Senki nem is mondta, hogy van, lehet bármekkora kuplerájt csinálni a kódban, de nem erről volt szó.
-
pmonitor
aktív tag
De beleírhatunk. Képzeld el a következő esetet:
1.: Designer nézetből létrehozol egy eseményt.
2.: Valamilyen megfontolásból törlöd az esemény Designer nézetben(de az eseménykezelő metódust nem, mert ugyebár azt nem törli a designer nézetből)
3.: Mégis szükséged lenne az eseménykezelőre.Ebben az esetben létrehozol designer nézetben egy eseménykezelőt dupla kattal. Igen ám, de ez az eseménykezelő metódus üres, az eredeti metódust akarod vissza csinálni. A létrehozott eseménykezelő metódust törlöd. Ekkor elszáll a designer nézeted. Innen már nincs más választásod, mint a designer file-ban turkálni.
Lehet, hogy a példám nem mindennapos, de előfordulhat, hogy MUSZÁJ a designer file-ban turkálni, hogy helyrehozd a designer nézetet.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
Alexios
veterán
válasz pmonitor #9502 üzenetére
De a kiindulási pont nem az volt, hogy miután elrontottunk valamit turkálni kéne benne, hanem hogy ha pl. új controlokat akar létrehozni, vagy meglevőkhöz hozzáadni, stb, akkor azt ne itt tegye.
(A felvázolt problémádnál pedig egyszerűbb megoldás szeirntem ha visszacsinálod a módosításokat, mint ennyire belemélyedni ebbe vagy legalábbis 1. pont után érdemes lehet bekomitolni a változásokat, és nem érhet gond )
[ Szerkesztve ]
-
pmonitor
aktív tag
válasz Alexios #9503 üzenetére
Ezért írom le már harmadszor, hogy tudni kell, hogy mit csinál az ember fia/lánya.
Az mindenképpen csak jó, ha ÉRTI valaki a működést, mert adott esetben helyre tud hozni dolgokat.
Én pl. jártam úgy, hogy 1 codeproject.com-os példában eleve elszállt a designer nézet. Hasznos volt, hogy tudtam, hogy mit kell csinálni.szerk.: mondjuk nekem aztán mind1, hogy valaki érti-e, vagy nem.
[ Szerkesztve ]
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
fatal`
titán
válasz pmonitor #9502 üzenetére
Ismét terelsz. Nem azt mondtam, hogy nem javítunk meg elcseszett designer fájlokat, hanem, hogy nem gányolunk bele mindenfélét. Nyilvánvalóan nem árt, ha értjük, hogy mi van benne, de azt nem azt jelenti, hogy össze-vissza gányolunk benne.
#9503: A fenti eset nem ritka, így ebben az esetben nem értek egyet, de nem ez volt a kiindulópont.
De mindegy, túl sok hsz-t pazaroltunk erre, a lényeg, hogy alapvetően nem abban turkálunk.
-
pmonitor
aktív tag
#9482 martonx: *.designer.cs fileokat nem szabadna módosítani.
vs.
#9505 fatal`: alapvetően nem abban turkálunk.Azért ez a 2 kijelentés között elég nagy különbség van. Pl. ha azt írta volna, amit te, akkor történetesen egy szavam sem lett volna.
Szerintem meg egy kezdő winforms-osnak kötelező megismerni azt, hogy a design nézet mögött mi zajlik a háttérben. Módosítani valamit design nézetben, megnézni, hogy ez mit változtatott a .design file-ban, használni a szürkeállományát, hogy ez miért is történik stb.. stb.. A kezdőn nem a friss kezdőt értem azért, hanem aki már tisztában van az event-ekkel. Sőt, az sem árt, ha esetleg néha ránéz az IL kódra is, hogy egy kicsit ahhoz is konyítson. Mint ahogy az sem baj, ha egy C-s kezdő nézegeti a generált ASM kódot is.
Martonx szerint meg semmi köze a .designer.cs file-okhoz.
Ez merőben eltérő filozófia a kettőnk között. Én azért alakítottam ki ezt az álláspontom, mert ha 1 kezdő elszúr valami olyan dolgot, amit nem tud helyreállítani(bár igazából nem kellene feladnia), akkor sem történik semmi. Egy példaprojekt tönkrement. És? Viszont sokkal magabiztosabb lesz később, mikor esetleg hozzá kell nyúlni egy éles projektben(ami nem mehet a kukába).
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
martonx
veterán
válasz pmonitor #9506 üzenetére
Továbbra sem értek egyet. Kezdőkről, sőt ha az eredeti kérdést olvastad, ultrakezdőkről beszélünk.
Akik nem azért kotorásznak a designer.cs file-ban, mert tudatosan abban akarnak módosítani, hanem mert olyan szinten fingjuk sincs, hogy mit csinálnak, hogy találomra bökdösnek a boldogan megtalált .cs file-okra.Ergo őket nem félrevezetni kellene, meg összezavarni, és ne abból indulj ki, hogy minden kezdő egyébként istenadta programozózseni, csak még kevés a tapasztalata.
Hanem egyértelmű iránymutatásokkal terelgetni, és majd ha egyszer (valaha?) oda jut, hogy valamit elrontott a designer file-ok piszkálása nélkül, akkor jöhet az igazság minden részletének kibontása , hogy figyi vannak ezek a designer file-ok, amikről eddig azt mondtuk, hogy ezeket nem kellene piszkálni. No, de ezek nem poénból vannak ott, van olyan eset, amikor ezekben kell javítani a visual kódszerkesztő dolgait. Ilyenkor ezekbe tudatosan bele lehet, sőt kell is nyúlni.
Ettől még az ökölszabály, hogy ezeket nem kellene piszkálni, továbbra is áll.Egyébként meg kötözködés helyett, neked is szabad megválaszolnod kérdéseket, szabad a pálya. Mindenki szabadidejében teszi, te is nyugodtan beleállhatsz, csak ne zavard össze, ne vidd félre szegény kezdőket
Én kérek elnézést!
-
Keem1
addikt
Srácok, mi a legjobb módja egy nem fix tartalmú JSON feldolgozásának?
A legjobb alatt értem, hogy tökéletes része legyen egy már meglévő robosztus programnak, ne f*ssa magát össze ha új entry kerül a JSON-ba vagy kerül onnan ki.A legjobb módja nyilván a szerializáció lenne, használtam már ilyet, de ott 1:1 megfeleltetés volt a JSON tartalma és a célobjektum között. Ez most nem ilyen, ez egy webes response, és a kutya füle se tudja, mikor mi kerül épp oda bele. A helyzetet bonyolítja, hogy multidimenziós a response. Nekem nem kell minden bele, de egy full háttérben futó eszközön menne (kijelzés nincs, log persze van), így nem túl szerencsés, ha egy-egy query alkalmával összehugyozza magát a program.
A Newtonsoft.Json library-t használom, valamennyire ismerem, de ott nem találtam erre biztonságos megoldást erre. A legegyszerűbb egy multidimenziós, bejárható objektum lenne, fogalmam sincs, létezik-e ilyen C#-ban. A dynamic nevű "adattípus"-t
ismeremhallottam róla, de ahogy tudom, eretnekség használni.Ha nem létezik ilyen, amit én keresek, megoldom máshogy (pl. felbontom a kapott JSON-t rész-objektumokra és szerializálom belőle azt, amire nekem szükségem van), csak ez egyrészt kicsit macerásabb, másrészt nehezebben vihető tovább, ha később kiderül, más adat is kell a response-ból.
Egyébként ha nem multidimenziós lenne, akkor valószínűleg egy dictionary-t használnék.
[ Szerkesztve ]
-
vlevi
nagyúr
Newtonsoft tud dynamic-t csinálni a jsonbol.
Tényleg nem célszerű sűrűn használni, de, ebben az esetben talán ez a jó megoldás.
A dynamicnal le tudod vizsgálni mindegyik részét, hogy null-e vagy sem, ha tömb, hány eleme van, satöbbi.
Nekem is volt olyan, ahol a httppost után visszakapott json a végeredmény függvényében más és más volt.[ Szerkesztve ]
-
Dictionary<string, object> -be deszerializálni nem megoldás?
Ez tartalmazná az első hiearchia propertijeit azok neveivel mint kulcsokkal és a hozzájuk tartozó "nem túl típusos" objektumértékkekkel. Ami kulcs hiányzik, olyan property nem volt a Jsonban.
Ha a második hiearchiaszint propertijei már erősen típusosak, akkor ott _gondolom_ már működni fog a castolás object-ről?
Ha a dynamic vonalon indulsz el, nézd meg az ExpandoObject-et. Ez is egy <string, object> dictionary valosít meg, többek között.
[ Szerkesztve ]
-
DrojDtroll
addikt
Jól sejtem, hogy ott ahol "as" operátor van használva kellene null-check is?
(ASP.NET Webforms legacy projekt -> nagyon sok helyen van a session-ből listába-tömbbe alakítás, majd munka a listán null check nélkül)
-
sztanozs
veterán
válasz DrojDtroll #9512 üzenetére
persze - az az adott osztályra cast-ol, vagy null-t ad - gyakorlatilag az alábbinek megfelelő synthetic sugar:
// object o = valami();
// T t = o as T;
T t = o is T ? (T)o : null;[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Keem1
addikt
Srácok, életemben először kell Windows verziót megállapítanom (néhányan kértek tőlem egy scheduled dark/light theme switchert, amit érdekes módon a Windows még magától valamiért nem tud).
Viszont ez Windows verzió függő (ha valaki nem jó OS-t használ, akkor nem fog működni).
Ámde azEnvironment.OSVersion
nem jó Windows verziót jelez.Több gépen is tesztelve az output - ez bizony egy Windows 8:
Microsoft Windows NT 6.2.9200.0Míg valójában az én rendszerem:
Microsoft Windows [Version 10.0.19042.867]Mi az oka a bugnak?
-
sztanozs
veterán
[link]
oka
* For applications that have been manifested for Windows 8.1 or Windows 10. Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2). To manifest your applications for Windows 8.1 or Windows 10, refer to Targeting your application for Windows.
Identifying the current operating system is usually not the best way to determine whether a particular operating system feature is present. This is because the operating system may have had new features added in a redistributable DLL. Rather than using the Version API Helper functions to determine the operating system platform or version number, test for the presence of the feature itself.[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Keem1
addikt
válasz sztanozs #9515 üzenetére
Ó hogy azanyáját
Ha már tényleg fontos a platformfüggetlenség, vajon miért nem lenne jó egy full univerzális
Environment.DetectYourOSVersionWhateverYouUse()
metódus...Na mindegy, vannak dolgok, amik szerintem a józan ésszel ellenkeznek, de ez legyen az én bajom.
Köszönöm, így már működik
Amúgy azt se értem, hogy a Dark/Light módhoz a registry-t kell b*szatnom, egy univerzális (akár WinAPI) motyó helyett. Már látom előre a rögtönítélő őtiszteletreméltó McAfee ferde nézését a folyamatos registry b*zerálás miatt
[ Szerkesztve ]
-
-
Keem1
addikt
válasz joysefke #9517 üzenetére
Röviden? Megszüntették az API-t
Egyébként:dynamic responsejson = JsonConvert.DeserializeObject(Response);
if (responsejson != null && responsejson.Count != null && responsejson.Count > 0)
{
foreach (var item in responsejson)
{
returndata.Add(item.Name, item.Value);
}
}A lényegi része ez.
Kicsit hosszabban:
De időközben a remek Xiaomi-Yeelight páros szó nélkül kivette a 3rd party API-t a lámpáikból. Egyik este vettem észre, hogy a scheduled task szerint már kapcsolnia kéne, mégse teszi. Aztán miután rátaláltam rengeteg elégedetlen vásárlóra a szó nélkül, lapítva kivett funkció miatt, próbáltam szabadságharcosként én is részt venni benne. Miután a Pi-n deaktiváltam a lámpákat, hogy ne legyen tele a log a hibaüzenetekkel.
Még megy a szájkarate a gyártó fórumain, mert semmilyen 3rd party eszközzel nem mennek most a Xiaomi lámpák. Domoticz, Home Assistant, stb. kuka -
sztanozs
veterán
Gondolom most már hogy elég eszközt adtak el, lehet passzírozni a felhasználókat a saját megoldás felé... eddig tartott a beetetés
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Keem1
addikt
válasz sztanozs #9519 üzenetére
Valahogy úgy...
De semmi nem tart örökké, majd az ő tündöklésük is alábbhagy. Nekem sose kéne olyan IoT megvalósítás, ahol egy szem mobilappot tukmálnak.
Egyrészt miért csak mobil? Miért dedikált app? Desktop miért nem? Otthonlevés érzékelése? Sehol.. Napkelte-napnyugta? Sehol.Jobban preferálom az átjárható megoldásokat, mindenki azt használhatja, ami szimpatikus. Szerencsére sok ilyen van. Az én Smart Home-om felülete is alapvetően HTML5+JS. Gyors, szép, mobilon és desktopon is tökéletes. És érzékeli ha hazaértem, és lámpát gyújt. Meg sötétedés után kapcsol. De a többi hasonló is ilyen, pl. a Domoticz.
A saját megoldás egyedüli erőltetése beszűkült látásmódot és az innováció teljes hiányát jelenti.Na mindegy, befejeztem az offot.
[ Szerkesztve ]
-
leslie23
tag
Sziasztok!
Azt hogy tudom észszerűen megcsinálni egy desktop appnál, hogy adatok frissítése alatt (gombra rányom, adatokat lekérem DB-ből és újra populálom + formázom a DataGrid-et, összesen ez kb. 2 másodperc) a UI ne legyen fagyva, vagyis a gomb vizuálisan ne legyen lenyomott állapotban, de újabb műveleteket ne tudjon kezdeményezni a felhasználó.
Ezeket egyébként értelmezni is nehéz lenne, mert bármilyen művelethez előzetesen az összes adat betöltése szükséges.
Egyelőre aszinkron futtatás és egy flag használata tűnik megoldásnak, a flag értékét pedig minden egyes user által indított esemény elején ellenőrizni kell. Viszont mivel elég sok control elem van a formon, ez kicsit körülményesnek tűnik. Van erre jobb megoldás? -
Alexios
veterán
válasz leslie23 #9521 üzenetére
Milyen desktop alkalmazás? De igazából jó úton jársz, WPF esetében pl. csinálhatsz valami bool propertyt ami ha kattintható akkor true, amúgy false, és ehhez kötöd a uicontrol-ok IsEnabled propertyjét.
A ui szál nem lefagyasztására az aszinkron futtatás lesz a megoldás, ahogy mondod. -
leslie23
tag
válasz Alexios #9522 üzenetére
Ez konkrétan WinForms, de gondolom ebből a szempontból a WPF is hasonló lehet. Az Enabled property kapcsolása amúgy jó ötlet, így megúszható lenne a bool flag ellenőrzés az eventök elején. Az egyetlen bajom, hogy így WinFormsnál két másodpercre minden control elszürkül, ami a relatíve sok színes ikon miatt egy viszonylag erős villanó effektust jelentene.
Esetleg a Click eventek lecsatolása, majd újbóli hozzáadása szerintetek járható út, vagy ez fapados megoldás lenne?[ Szerkesztve ]
-
leslie23
tag
válasz martonx #9524 üzenetére
Szia! Köszi, async-await lesz mindenképp. Viszont ha jól értelmezem, akkor az await ellenére másik gombra még rá tud kattintani a user, és le is fog futni mögöttes logika. Én lényegében ezt szeretném megakadályozni. Vagyis elkerülni azt, hogy ténylegesen fagyjon az UI, de nem engedni olyan műveleteket meghívni, amelyek csak úgy értelmezhetőek, ha a DataGridView már teljesen készen van.
-
pmonitor
aktív tag
válasz leslie23 #9525 üzenetére
Ha fizikailag egy csoportba tudod tenni azokat a control-okat, amelyeket nem szeretnél használni a művelet alatt, akkor használhatsz groupbox vagy panel controlt, és akkor
panel1.Enabled=false;
vagygroupBox1.Enabled=false;
,
majd ha végeztél, akkor true.Ha nincsenek 1 csoportban, akkor még mindig van olyan lehetőség, hogy 1 listába beleteszed azokat a control-okat, amiket le szeretnél tiltani. Ebben az esetben 1 ciklussal kell végigmenni a lista elemein, és így tiltani/engedélyezni.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
leslie23
tag
válasz pmonitor #9526 üzenetére
Nagyon köszi nektek a segítséget, még nem volt időm foglalkozni vele.
Az asnyc-await biztos, az enabled propertyt elegendő lenne a menustripen false-ra tenni, szóval ez elegánsan hangzik. Az egyetlen félelmem továbbra is a színes ikonok miatti 2-3 másodperces szürke/színes "villogás", ami az enabled változtatása során történik. Ki fogom próbálni, ha nagyon zavaró, akkor marad az OnClick eventek programozott hozzáadása/lecsatolása.
Köszi szépen a tippeket! -
Keem1
addikt
Srácok, van a formon egy groupbox, azon pedig 7 db checkbox (vizuálisan beragadó gomb formájában). Ezek a hét napjait reprezentálják.
Addig eljutottam, hogy a bekattintott napokat (egyelőre a control neveit stringként) bedobom egy listbe:List<string> days = new List<string>(gbDays.Controls.OfType<CheckBox>().Where(chk => chk.Checked).Select(chk => chk.Name).ToList());
Nekem viszont olyan kéne, hogy a groupboxban betöltött indexük szerint (ahol az első checkbox a 0., az utolsó a 6.) kellene inkább egy List<int>. Feltéve ha egyáltalán van ilyen indexük.
Szerintetek?Közben rájöttem, hogy elvileg a fenti LINQ kódot lehetne továbbvinni úgy, hogy a mostani listában szereplő index kerülne bele a végső, int listbe. Ugye?
Pszeudo:
int[] dayindexes = ListOfControls().WhereChecked().ToList().IndexesFromSourceList().ToList();
Nem tudom, ez mennyire érthető így.
Szerk2: ez nem biztos hogy jó ötlet. Összezavarodtam
[ Szerkesztve ]
-
nagyúr
Nem teljesen értem mit akarsz, de miért nem rakod be az összes input értéket egy listába, attól függetlenül hogy true/false. A végén akkor lesz egy 7 elemű listád, amin ha végig iterálsz akkor meg tudod mondani, hogy az 5. eleme a listának az true vagy false.
[ Szerkesztve ]
-
Keem1
addikt
A lista egy crontabszerűséghez lenne.
A lényege, hogy Monday=1, ... Sunday=7
A formon fenn vannak a napok, amikből készül a crontab string utolsó szekciója.
Az megvan, hogy ha a bekattintott elemek száma = 7, akkor ez * lesz. Ha pl. csak a hétfő, akkor 1. Ha hétfő-kedd, akkor 1,2. És így tovább.Szóval a cél az, hogy:
- ha a bekattintottak száma 0 vagy 7, akkor a(string)cronweek = "*"
. Itt mindegynek veszem, hogy mind be van-e kattintva vagy egyik sem, az a teljes hetet fogja jelenteni.
- ha 1-6 van bekattintva, akkor azok numerikus indexei kerüljenek bele vesszővel elválasztva, pl:(string)cronweek = "1,5,6"
Az adott stringemnek kötelezően vagy egy csillagnak, vagy 1-től 6-ig vesszővel elválasztott felsorolásnak kellene lennie a bekattintott checkboxokból azzal a megkötéssel, hogy ha mind be van kattintva vagy egyik se, akkor kötelezően csillag legyen.
Szóval ez a cél.
[ Szerkesztve ]
-
Keem1
addikt
Köszönöm, megnézem ezt is Időközben találtam egy megoldást, de félve merem leírni, mert eléggé gány
Lett egy ilyenem: List<DaysOfWeek> dayschecked
Aztán a DaysOfWeek.TryParse segítségével csekkolom a LINQ által kiköpött checkbox texteket, amik (optimális esetben) azonosak egy nap nevével. És a dayschecked végül így a kiválasztott napokat tartalmazza. A cron string készítésekor pedig a napok első 3 karakterét joinoljaGány... de működik. A cron elfogadja a napok számait és a napok 3 betűs rövidítéseit is. Ez utóbbit lovagoltam meg.
[ Szerkesztve ]
-
Keem1
addikt
válasz sztanozs #9534 üzenetére
A már sokat emlegetett céges team toolomat egészítem ki egy auto dark switcherrel.
Van egy cron lib, aminek a joblistje szabványos crontab stringet és a futtatandó metódust kéri.
Aztán start() és innentől már nem az én dolgom a jobok futtatása, megoldja ez a lib a háttérben külön threadekként.
A dark mode on és a dark mode off kerül bele két fix taskként, és ehhez generálom a cron stringet.
Erre két opció megy: kézzel megadja a delikvens (dark on xx:xx-kor, dark off yy:yy-kor) vagy automatikusan lekért földrajzi hely szerinti napkelte/napnyugtakor.
Ha ez elég lenne, egyszerű lenne a két cron string: "xx xx * * *" illetve yy yy * * *". De nem elég, a napokat is bele akarom mazsolázni: az utolsó csillag a days of week, ami lehet * (minden nap, ha vagy egyik nap sincs kiválasztva, vagy mind a hét be van kattintva), vagy pedig a napok sorszáma/rövidítése vesszővel felsorolva (1,2,5 vagy Mon, Tue,Fri).Dióhéjban ennyi.
* Igen-igen, tudom, hogy van egy csomó kész megvalósítás (még egyiket se próbáltam), de céges gépre nem tehető fel külső forrásból semmi.
[ Szerkesztve ]
-
sztanozs
veterán
Beállítasz a Control Tag property-be 1...7-et és Name helyett a Tag-et kéred le:
string.Join(",", gbDays.Controls.OfType<CheckBox>().Where(chk => chk.Checked).Select(chk => chk.Tag));
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Valami ilyesmi:
string.Join(",", gbDays.Controls.OfType<CheckBox>().Where(chk => chk.Checked).Select(chk => chk.Tag).DefaultIfEmpty("*"))
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
pvt.peter
őstag
Sziasztok,
Lehet triviális a kérdésem de OutOfMemoryException esetében, hogyan képes "tudatni" a program, hogy OutOfMemoryException történt?
Elméletileg betelt a memória így már arra sem lenne erőforrás, hogy kiírja, hogy elfogyott az erőforrás, nem?Ez egy .50-es rombolópuska, elég szép visszarúgással.
-
sztanozs
veterán
válasz pvt.peter #9539 üzenetére
Out of memory error azt jelenti, hogy további memória foglalása nem lehetséges (pontosabban a foglalandó memória mérete meghaladja a rendelkezésre álló memóriát).
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
pmonitor
aktív tag
A következő kód:
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace DiskProp
{
class Program
{
const uint IOCTL_DISK_GET_DRIVE_LAYOUT_EX = 0x70050;
public enum PARTITION_STYLE : int
{
MasterBootRecord = 0,
GuidPartitionTable = 1,
Raw = 2
}
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct DRIVE_LAYOUT_INFORMATION_MBR
{
public long Signature;
}
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct DRIVE_LAYOUT_INFORMATION_GPT
{
public Guid DiskId;
public long StartingUsableOffset;
public long UsableLength;
public long MaxPartitionCount;
}
[Serializable]
[StructLayout(LayoutKind.Explicit)]
public struct DRIVE_LAYOUT_INFORMATION_UNION
{
[FieldOffset(0)]
public DRIVE_LAYOUT_INFORMATION_MBR Mbr;
[FieldOffset(0)]
public DRIVE_LAYOUT_INFORMATION_GPT Gpt;
}
[StructLayout(LayoutKind.Sequential)]
public struct PARTITION_INFORMATION_MBR
{
public byte PartitionType;
public bool BootIndicator;
public bool RecognizedPartition;
public Int32 HiddenSectors;
}
[Flags]
public enum EFIPartitionAttributes : ulong
{
GPT_ATTRIBUTE_PLATFORM_REQUIRED = 0x0000000000000001,
LegacyBIOSBootable = 0x0000000000000004,
GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER = 0x8000000000000000,
GPT_BASIC_DATA_ATTRIBUTE_HIDDEN = 0x4000000000000000,
GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY = 0x2000000000000000,
GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY = 0x1000000000000000
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PARTITION_INFORMATION_GPT
{
public Guid PartitionType;
public Guid PartitionId;
[MarshalAs(UnmanagedType.U8)]
public EFIPartitionAttributes Attributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]
public string Name;
}
[StructLayout(LayoutKind.Explicit)]
public struct PARTITION_INFORMATION_UNION
{
[FieldOffset(0)]
public PARTITION_INFORMATION_MBR Mbr;
[FieldOffset(0)]
public PARTITION_INFORMATION_GPT Gpt;
}
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct PARTITION_INFORMATION_EX
{
[MarshalAs(UnmanagedType.U4)]
public PARTITION_STYLE PartitionStyle;
public long StartingOffset;
public long PartitionLength;
public int PartitionNumber;
public bool RewritePartition;
public PARTITION_INFORMATION_UNION DriveLayoutInformaiton;
}
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct DRIVE_LAYOUT_INFORMATION_EX
{
public PARTITION_STYLE PartitionStyle;
public int PartitionCount;
public DRIVE_LAYOUT_INFORMATION_UNION DriveLayoutInformaiton;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 128)]
public PARTITION_INFORMATION_EX[] PartitionEntry;
}
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr CreateFile(
[MarshalAs(UnmanagedType.LPTStr)] string filename,
[MarshalAs(UnmanagedType.U4)] FileAccess access,
[MarshalAs(UnmanagedType.U4)] FileShare share,
IntPtr securityAttributes, // optional SECURITY_ATTRIBUTES struct or IntPtr.Zero
[MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes,
IntPtr templateFile
);
[DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
IntPtr lpInBuffer, uint nInBufferSize,
IntPtr lpOutBuffer, uint nOutBufferSize,
out uint lpBytesReturned, IntPtr lpOverlapped
);
static void Main(string[] args)
{
Type ts = typeof(DRIVE_LAYOUT_INFORMATION_EX);
int ss = Marshal.SizeOf(ts);
}
}
}Ezt a kivételt dobja:
Nem kezelt kivétel: System.ArgumentException: A típus („DiskProp.Program+DRIVE_LAYOUT_INFORMATION_EX”) nem adható át végrehajtásra nem felügyelt struktúraként; nem számítható ki értelmezhető méret vagy eltolás.
a következő helyen: System.Runtime.InteropServices.Marshal.SizeOf(Type t)A DRIVE_LAYOUT_INFORMATION_EX elég összetett struktúra. Nem tudom, hogy hol lehet a hiba. Van valami 5letetek?
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
Keem1
addikt
Srácok, egy webclientes kódrészletet kéne kiegészítenem. Túl sok, bonyolult és fontos kód része, így csak a várt működéshez szükséges kóddal egészíteném ki.
Ami kéne, egy json stringet kéne az alábbiakkal együtt elküldenem POST-ként. UploadString jó lenne, de az alábbiakat átírni nem akarom. Muszáj ezzel kezdenem valamit, mert már működő kód.
GZipStream responseStream = new GZipStream(wc.OpenRead(page_url), CompressionMode.Decompress);
StreamReader reader = new StreamReader(responseStream);
ResponseHtml = reader.ReadToEnd(); -
pmonitor
aktív tag
válasz pmonitor #9542 üzenetére
A következő módosítással sikerült megoldanom. Ezt:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PARTITION_INFORMATION_GPT
{
public Guid PartitionType;
public Guid PartitionId;
[MarshalAs(UnmanagedType.U8)]
public EFIPartitionAttributes Attributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]
public string Name;
}Így módosítottam:
[StructLayout(LayoutKind.Sequential)]
public unsafe struct PARTITION_INFORMATION_GPT
{
public Guid PartitionType;
public Guid PartitionId;
public EFIPartitionAttributes Attributes;
public fixed byte Data[72];
}Így kell az unsafe kód engedélyezése, de a probléma megoldódott.
[ Szerkesztve ]
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
pmonitor
aktív tag
válasz pmonitor #9544 üzenetére
Azt elfelejtettem, hogy a működő kód megtalálható itt. Valamint egy rövid leírás itt.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
Keem1
addikt
Srácok, szerintetek a Windowsnak miért nincs már végre egy normális package managere? Nem, a Windows Store nem az... bár az ötlet jó, a megvalósítás egy vicc kategória. Csak UWP appok vannak, külső forrás nuku, azt se tudom, hogyan lehet ott appot publikálni (sehol semmi említés, ingyenes-e vagy sem), és szerintem jellemzően MS által preferált fejlesztők/projektek vannak jelen, és maga a store tárolja egyedül a csomagokat.
Nekem inkább a Winstore az Android Store itteni megfelelője, jellemzően mobilos appokkal (hol vannak már a Wines telefonok...). Miért nem kerülhet oda be egy régebbi app, ha tökéletesen működik? Ne kelljen már összevadászni az installert. No meg miért csak az általuk engedett appok mehetnek, külső források miért nem? A Win Store ötletben zseniális, megvalósításban nem hogy kapufa, inkább öngól. Ja, és lehetne különböző láthatóság: publikálok egy appot, akkor mondhatom azt, hogy bárki elérheti, vagy mint a YouTube esetén, privát (csak én, mondjuk gépeim között), vagy nem listázott (akinek a linkjét átküldöm, az elérheti). Nagyon kétlem, hogy ezek a jó gondolatok csak nekem jutnak eszembe, és az MS zsenijeinek nem...Én inkább valami olyasmire gondolnék, mint a Debian alapú linuxokban az APT. Nem csak egy forrás, hanem ami alá van írva, bármi lehet a forrás, akár mirror site is. Bármilyen app mehet, a megfelelő platformra valót installálja, az update is pofonegyszerű.
[ Szerkesztve ]
-
-
Keem1
addikt
válasz joysefke #9547 üzenetére
Na, végre valami kezdeményezés
Egyébként ahogy most így utánaolvastam, van valami MS-féle kezdeményezés is (winget), de félek hogy ez is hamvába fog hullni. Kb. 900 package-et látok benne (ha jól látom), ami egy Windows, mint target esetén még naponta is kevés, nem hogy összesen...
Pedig ez első olvasatra olyan, amilyennek én szeretném hogy legyen. Azt írják, lesz külső repo is (vagy már van is, legalábbis github skeletont már találtam hozzá).
-
martonx
veterán
winget-cli pont erre van, kb. 1 éve elégedetten használom. Igaz, a mai napig sincs meg minden rajta 100%-ban, pontosabban az elmúlt 1 évben 1 olyan alkalmazás volt, amit csak a scoop-ból (ez is olyan, mint a winget) tudtam beszerezni.
microsoft/winget-cli: Windows Package Manager CLI (aka winget) (github.com)
winget-pkgs/manifests at master · microsoft/winget-pkgs (github.com) - ezek vannak most rajta, percről percre bővül a lista. Ha te ezt meg tudod számolni, akkor sok sikertDe a belinkelt chocolatey is tök jó.
Nem fog hamvába halni, mivel ha figyelemmel követed, MS nagyon tolja a console irányt (windows terminal).
[ Szerkesztve ]
Én kérek elnézést!
-
Livius
őstag
Sziasztok!
Az MS oldalán belefutottam egy érdekességbe, pontosabban abba, hogy azt írjak a .NET framework 5.0 már telepíthető Linuxokra. Valaki próbálkozott ilyennel már, hogy egy C# WPF GUI-s program amit a Windows-ra csinált és ott jól is működik, Linuxon hogy lehet futtatni?
Install .NET on LinuxGigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- GAMER PC - NZXT - RTX 3060Ti 8GB - i7 7700 - 32GB DDR4 - 500GB M.2 Nvme SSD - 1TB HDD
- BONTATLAN Új Iphone 15 PRO 128-512GB Független 1év Apple GARANCIA Deák Térnél Azonnal Átvehető.
- ÚJ Bontatlan Macbook Pro 16 M3 Pro MAX 14 30GPU 96GB 2TB Magyar billentyűzet Azonnal átvehető.
- 5% kedvezmény a Cammus szimulátor termékeihez.
- Krómozott előlapos Jura Z5 automata kávéfőző beépített profi cappuccino fejjel