Keresés

Hirdetés

!! SZERVERLEÁLLÁS, ADATVESZTÉS INFORMÁCIÓK !!
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!

Új hozzászólás Aktív témák

  • MasterDeeJay

    veterán

    Feladat:
    egy webes időpontfoglalóra kellene írnom olyat ami autómatán kattint szabad időpontra amikor az elérhető.

    Jelenleg kész van az alábbi:
    Chrome autosavewebpage pluginnal lementi percenként az oldalt (ez kevés, le kellene vinnem 10-20sec-re)
    Majd egy vb.net progi a lementett oldalon megkeresi hogy van-e submit gomb aztán jelez hanggal.

    A gond az hogy legrosszabb esetben 1 perc 10 másodperc alatt jutok információhoz az időponttal kapcsolatban és még rá is kell kattintanom szóval olyan 10-70s az átfutási idő. Ezt kellene lerövidítenem.

    Arra gondoltam hogy keresek másik refresh progit az oldalra. Na de hogyan kattintok egy elemre a weboldalon? Chrome plugin nem tudom van-e ilyenre. vb.net beépített böngészőjén gondolkodom de az nem biztos hogy működik az időpontfoglalóval. (közlekedésfelügyelet, ügyfélkapus bejelentkezés)

  • MasterDeeJay

    veterán

    Cégnél van pár program ami néha frissítést kér. Ezt egy exe file és silent kapcsolóval szoktam csinálni egy parancsikonról hálózatról. (több ilyen is van)
    Szeretném ezt automatizálni.
    Így hát írtam rá egy egyszerű programot vb.nettel ami az alábbit csinálja:
    megnézi hogy hálózaton a frissítések mappában milyen exéket raktam be
    megnézi hogy adott szoftver van-e a gépen ami szerepel a frissítendők között
    elindítja az adott frissítést waitforexit majd indítja a következőt persze mind silent kapcsolóval
    Cél az lenne hogy egy egy programnál ne kelljen nekem egyenként gépenként frissítgetni, tartomány nincs így login scriptet nem tudok futtatni de feladatütemezővel oldanám meg bejelentkezéskor.

    Na a gond az hogy user bejelentkezik és a progi működik viszont jogosultságot kér. Ha beikszelem a feladatütemezőbe hogy futtatás a legmagasabb jogokkal akkor a program nem képes indítani semmit a hálózatról (gondolom mert a helyi rendszergazda fiók nem fér hozzá a hálózati dolgokoz)
    Tehát hogyan tudom úgy futtatni a programot hogy user bejelentkezik és a windows NE kérjen tőle semmilyen interakciót hanem szépen fusson le minden amit a programom hív meg.
    Ha user rendszergazda vagy rendszergazda nevében indítom akkor is bejön az UAC jóváhagyása az exékre egyenként.
    Szóval nekem az kellene hogy a program egyszer sem vagy maximum egyszer kérjen jóváhagyást és ne egyenként.

    Részlet a kódból:

    Dim szamlazohelye64 As String = "C:\Program Files (x86)\Kulcs-Soft\Kulcs-Számla\szamla.exe"
    Dim szamlazohelye32 As String = "C:\Program Files\Kulcs-Soft\Kulcs-Számla\szamla.exe"
    Dim szamlazoupdatehelye As String = "\\SZERVER\public\Kulcsszoft frissítések\Xszamlazoupdate.exe"

    If My.Computer.FileSystem.FileExists(szamlazoupdatehelye) Then
    log = log & vbCrLf & d & " Számlázó frissés file megvan"

    If My.Computer.FileSystem.FileExists(szamlazohelye64) Then
    log = log & vbCrLf & d & " Számlázó gépen megtalálva"
    Process.Start(szamlazoupdatehelye, " /silent").WaitForExit()
    log = log & vbCrLf & d & " Számlázó gépen frissítve"
    Else
    If My.Computer.FileSystem.FileExists(szamlazohelye32) Then
    log = log & vbCrLf & d & " Számlázó gépen megtalálva, de nem az x86 mappában"
    Process.Start(szamlazoupdatehelye, " /silent").WaitForExit()
    log = log & vbCrLf & d & " Számlázó gépen frissítve"
    Else
    End If

    End If

  • MasterDeeJay

    veterán

    válasz coco2 #18614 üzenetére

    Találtam egy exceldatareader nevű ingyenes valamit nuget csomagként. Aztán beolvasta de 2-3 perc alatt, de szerencsére datagridview paramétereiben állítgattam dolgokat most pár másodperc alatt beolvassa és megjeleníti.
    Igaz ez még csak a kis táblázat (1700 oszlop, 45 sor) de a nagyobbal is max 5 másodperc lehet.
    Lényeg hogy működik!

  • MasterDeeJay

    veterán

    válasz sztanozs #18610 üzenetére

    Ez jó lenne bár nem tudom hogy kezeli azt ha nem létezik annyi oszlop. Mivel változó oszlopszámom van. Kb átlag 1400-1500 oszlopom van. (15 oszlop per nap legalább 3 hónapnyi adat kell egyszerre de jó lenne egy évre is megcsinálnom az kb 5400 oszlop) magyarán előre ki kell számolnom 5400 oszlopra a beolvasast az meg kb 22 beolvasás. Habár ha az első errornál abbahagyhatja. Vagy valahogy lekérdeznem mennyi oszlop van és az szerint beovasnom.
    Megpróbálom köszi!

  • MasterDeeJay

    veterán

    válasz coco2 #18607 üzenetére

    Van benne dátum és pénzösszeg is.
    A másik gond hogy mi a legegyszerűbb kód beolvasásra?
    Amit találtam az nem kezeli azt hogy ismétlődnek az oszlopok neve az első sorban. Az oledb megoldotta hogy megtoldotta az oszlopnevet számmal. Első sor oszlopneveket tartalmaz valahogy így néz ki:
    Dátum, lerakó,dátum,felrakó,számlaszám,összeg,dátum...
    És így tovább ismétlődik szabályosan persze ennél több adattal csak lényeget emeltem ki.
    A sorok pedig rendszámokat jelölnek.

  • MasterDeeJay

    veterán

    Vb.net (visual studio 2022)

    Van egy bazi nagy excel táblám amiből adatokat nyerek ki és egy program generálja, annak az oszlopszáma meghaladja a 255-öt. Hogyan tudom beolvasni sima datagridview-be?

    most egy sima oledb-t használok beolvasásra ami nem olvas be 255-nél többet:

    conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + bemenetexcel + ";Extended Properties=Excel 12.0;")

    Kimenetnek nem gond mert az eredmény kevesebb mint 255 oszlop lesz és a sorok is ilyen max 100-as darabszámúak. Szóval visszaírnom nem kell sok oszopszámmal de beolvasni igen.

  • MasterDeeJay

    veterán

    válasz sztanozs #14316 üzenetére

    Tökéletes, az első oszlopot meg lefixáltam és mindig megjelenik így látom hol vagyok és megy a másolás is! :R

  • MasterDeeJay

    veterán

    .NET visual basic 2017
    datagridview-et feltöltöm adatokkal és szeretnék egy cellából adatot kimásolni vágólapra hogy beillesszem kézzel máshova (akár más programba)
    Ha belekattintok és nyomok egy ctrl+c-t akkor az egész sort viszi, nem jó!
    Ha belekattintok és kijelölöm a szöveget akkor is az egész sort viszi ctrl+c-vel! megint nem jó!
    Ha belekattintok és kijelölöm a szöveget és egérrel jobb gomb másolás akkor viszi az adott cellában lévő adatot, így szeretném ha ez történne a fenti két esetben is!
    Az igaz hogy a datagridview az egész sort jelöli ki egy kattintásra mert látnom kell melyik sorral dolgozok éppen.
    Azt szeretném ha a cellán állok és úgy ctrl+c-zek akkor csak a cella tartalmát vigye vágólapra ne pedig az egész sort, de úgy is jó ha nekem kell belekattintani szerkesztő módba!

  • MasterDeeJay

    veterán

    válasz Zalanius #11983 üzenetére

    Köszi!

    így csináltam meg:

    Public strCon As String = "Data Source=" & sqlszerverneve & ";Initial Catalog=" & adatbazisnev & ";User ID=sa;Password=" & sqlsajelszo & ";Connection Timeout=50;"

    Dim adapter As New SqlDataAdapter("select teljesnev from felhasznalok WHERE felhasznalonev = '" & felhasznalonev & "'", strCon)

    Dim dataset As New DataSet
    adapter.Fill(dataset)
    teljesnev = (dataset.Tables(0).Rows(0).Item(0))

    szóval a dataset szimpatikus, ürítgetem és feltöltöm amire szükség van azzal.

  • MasterDeeJay

    veterán

    Hali mindenkinek!

    VB.NET-ben írogatok néha és szeretnék SQL-el dolgozni benne. Lenne egy megbízólevél amit megadott adatok alapján kellene kitöltenie a proginak. Tudom egyszerűbb lenne egy körlevélkészítő de szeretném én magam megcsináni.

    Jelenleg egy neten talált kód alapján írtam egy nagyon egyszerű login ellenörzőt ami csak arra kell hogy a felhasználó név alapján töltsön ki egy űrlapot. Nem is igazi login de célnak megfelel.

    Public con As New SqlClient.SqlConnection
    Public strCon As String = "Data Source=" & sqlszerverneve & ";Initial Catalog=" & adatbazisnev & ";User ID=sa;Password=" & sqlsajelszo & ";Connection Timeout=50;"

    Public Sub loginellenorzes()
    sql = "select count(*) from felhasznalok where felhasznalonev=@felhasznalonev and jelszo=@jelszo"
    Using Conn As New SqlConnection(strCon)
    Using cmd As New SqlCommand(sql, Conn)
    Conn.Open()
    cmd.Parameters.AddWithValue("@felhasznalonev", felhasznalonev)
    cmd.Parameters.AddWithValue("@jelszo", jelszo)
    Dim value = cmd.ExecuteScalar()
    If value > 0 Then
    Foablak.Show()
    Loginablak.Hide()
    Else
    MessageBox.Show("Hibás fehasználónév/jelszó")
    End If
    Conn.Close()
    End Using

    End Using
    End Sub

    Eddig ez okés is, tökéletesen működik.

    Viszont kellene egy sub visszatérő értékkel ami azt csinálja hogy megadott sql parancsokat végrehajt majd visszadja az eredményt string-be vagy tömbbe hogy azt használhassam a progiba.
    Szóval mi a bevállt dolog sql lekérdezésekre? Gondolom nem kell minden egyes parancs előtt connectelni?

  • MasterDeeJay

    veterán

    VB.NET-ben szeretnék írni egy egy olyan progit ami bemásol egy adott file-t egy hasonló nevű mappába.

    Tehát a fileok nevei ilyesmik:

    C_20151007_0701_T_TESZT_HUG00001465560

    A mappák nevei pedig pl:
    TAMAS TESZT

    Tehát mi az a kód amivel úgy tudok másolni hogy egyezést keres a filenévben és oda másolja. Az egyezéskor csak betüt kell figyelembe venni, abból is csak az összefügő nevet pl T_TESZT a név mögötti és elötti nem érdekes de azt le tudom vágni.
    Addig megvan hogy beolvasom a mappák nevét és fileok nevét.

    Azonos vezetéknév miatt figyelnem kell az egész névre tehát a keresztnév első betűje is fontos.

  • MasterDeeJay

    veterán

    Távoli asztali programot szeretnék írni visual studio-ban. Rengeteg leírás van hozzá és már példák alapján sikerült is összehozni.
    Ami viszont nekem kellene az az hogy ne kelljen tűzfalat nyitni hozzá. Ez valami NAT-olás dolog lehet, de nem tudom hogyan kezdjek hozzá. Olyasmi megoldást szeretnék mint a teamviewer ami át megy mindenen.
    Tehát lenne egy központi szerver rész amire feljeletkeznek a kliensek és én távolról látnám a képernyőjüket (mjpeg stream megoldást találtam) és egeret, billt tudnék vezérleni távolról.
    Szóval mi is az a hálózati dolog amitől nem kell portot nyitni?
    Hogyan működik ez többszörösen natolt hálózatokon? (pl mobilnet ahol nincs saját külső ip és pluszba még egy routeren is át kell menni)

  • MasterDeeJay

    veterán

    válasz amargo #6197 üzenetére

    Köszi!

    Maradt a pingelés, találtam egész jó kódot rá. [link]

    Leírom hátha másnak is kell. Lényege hogy aszinkron csinál pinget, nem kell megvárni az eredményt hanem egyszerre többet csinált több szálon. Így az egész tartományt egyszerre pingelem. Feltétele minimum VS2010 SP1 és Async CTP sp1 , persze nekem valamelyik windows frissítés hiánya miatt nem ment fel az async ezért az egészet lecserélem VS2012-re.
    Aztán rájöttem hogyha egy gépet kijelölök akkor is nézze meg az állapotát, így nem kell gyakran pingelni mindent.
    Fileshare is jó ötlet, de van pár speckó eset (pl: win7 hálózatfelderítés off) amikor nem megy viszont mégis elérem a gépet más módon (TV/VNC).

  • MasterDeeJay

    veterán

    válasz martonx #6195 üzenetére

    Nem nyert! Ezeket már végigjártam. Igazán segítőkész vagy!
    Az a gáz hogy az active szóra az active directory jön ki googléból . Eddig én is eljutottam, rengeteg példa van hogyan kell magát az egész active directory-t kilistáz.
    Nekem a már kész listát kellene végignézetnem hogy melyik gép ad választ. Ehhez keresgélek megoldást, bár eddig többszálú pingelést látom jónak.

  • MasterDeeJay

    veterán

    Hali mindenkinek!

    Egy progit írok amihez kell hogy kilistázzam az összes tartományban lévő gépet. Ez idáig megvan, csak azt kellene megcsinálnom hogy meg tudjam állapítani azt hogy a gépekből melyik van bekapcsolva.

    A jelenlegi kóddal olvastatom be a tartományt:
    Public Function GetComputers() As String
    folista_listbox.Items.Clear()
    allapotjelzo.Text = "Domain Beolvasás"
    Me.Cursor = Cursors.WaitCursor

    Dim domainEntry As DirectoryEntry = New DirectoryEntry("WinNT://" + tartomany)
    domainEntry.Children.SchemaFilter.Add("computer")

    For Each computer As DirectoryEntry In domainEntry.Children
    result = computer.Name & Environment.NewLine
    allapotjelzo.Text = "Domain Beolvasás kész!"
    allapotjelzo.Text = result & " Hozzáadva"
    folista_listbox.Items.Add(result)
    allapotjelzo.Text = folista_listbox.Items.Count & " gép a listában"

    Next
    Me.Cursor = Cursors.Default

    Return result

    End Function

    A kérdésem az lenne hogy milyen módon állapíthatom meg hogy melyik gép van bekapcsolva a tartományban? Pingre gondoltam de nem találtam elég gyors megoldást rá (10 percenként végigpingelni több mint 200 gépet sztem gáz lenne), esetleg tudná-e valaki hogy a DirectoryEntry-ben van-e valami aktív gép jelző az is jó lenne.

    Korábban igen primitív módon oldottam meg és nem is működött jól. (meg kellet várni az eredményt, valamint az offline gépeket nem kaptam meg, és a beolvasás pillanatában sem volt teljesen friss a lista)

    netexe = "C:\Windows\System32\net.exe"
    Me.Text = "domain beolvasás"
    Me.Cursor = Cursors.WaitCursor
    Dim shellink As String
    shellink = "cmd /c " & netexe & " view > " & geplistatxt

    (Ja és ez Visual studio 2010, VB.NET)

  • MasterDeeJay

    veterán

    válasz ArchElf #5916 üzenetére

    VB.NET 2008

    A kaja az a legfontosabb gomb a progiban :D , kiírja hogy a környéken aznap milyen menü van a kajáldákban. :DD Így nem kell végignézegetnem a weboldalakat egyenként. Nehogy már rendszergaziként ne tudjam egyből hova megyek kajálni.

    Volt benne WOL magicpacket is amivel fel lehetett ébreszteni a gépet kikapcsolt állapotban de kevés gépen ment biosbeállítás miatt és nem is használtam. Éppen ami kell az belekerül, inkább elcseszek pár napot egy kóddal minthogy 250 gépen kelljen végigmenni egyenként amire egyébként is időm. Elképesztően sok dolgot automatizáltam, ha nem tettem volna akkor már idegbeteg lennék vagy munkanélküli esetleg mindkettő. Van hogy le kell olvasni a nyomtatott lapok számát, na az a nyomtatók webes felületéről szedi össze a dolgokat, minek menjek végig kézzel nyomogatva. Másolgatás, frissítés, átírás, tömeges beállítások átírása ez mind automatizálható. De csak ebben a környezetben működik mivel sok mindent szed a hálózati meghajtókról és szerverekről.

    Viszont az irodai vízforralót még nem tudtam automatizálni hogy pontosan 70 fokra melegítse a vizet a zöld teához. Soros porton csináltam már hőmérőt, de 230v-ba inkább nem nyúlok bele csak azért hogy kikapcsoljam időben. :) Korlátlan lehetőség van, csak valamiért még mindig kőkorszakban élünk pedig filléres téma lenne összehozni olyan dolgokat mint ami a sci-fii filmekben van a jövő házairól.

  • MasterDeeJay

    veterán

    válasz ArchElf #5914 üzenetére

    Ez visual basic. :DDD
    A progim egy eléggé öszetett valami. Lekérdezi a tartomány összes aktív gépét majd azokkal lehet műveleteket végezni. Kiválasztani listából gépeket aztán VNC vagy Teamviewerrel rámegy atól függően mi van rajta. Kattintásra nyomtatót telepít, fileokat cserél, java-t flasht adobe cuccokat updatel.

  • MasterDeeJay

    veterán

    válasz ArchElf #5912 üzenetére

    Ha jól vettem ki a kódból akkor ez felveszi hálózati meghajtóként és úgy másolgat. Kifejezetten tetszik az ötlet, az a gáz hogy nekem ezt a másolgatást egy meglévő progiba kellene beleraknom. Habár bele tudom rakni ezt a batot is kívülről meghívogatva. Ez a kód jó lesz, csak pár másodpercet vár ha gáz van.

  • MasterDeeJay

    veterán

    Vb.net 2008-al írogatok pár progit és rendszeresen belefutok egy dologba amit nem tudok normálisan megoldani. Arról lenne szó hogy van 250 gép amiknek a default share (c$)-jára szeretnék másolgatni majd elindítani, tehát egyszerű másolásról van szó az indítást meg wmimgt create process-el oldottam meg.
    A probléma azzal van hogy másoláskor ha a program nem ér el c$-t akkor totálisan szétfagy kb 20-30 másodpercre. A kérdés az lenne hogy milyen megoldással tudok úgy gépekre másolni hogy ne fagyon szét csak dobjon ki azonnal egy hibaüzenetet és ne fél percel később.

    Jelenleg így néz ki a másolós rész:

    strComputer = txtComputer.Text
    filemasolando = "*******\Update\valami.exe"
    ujfilehelye = "\\" & strComputer & "\C$\update\valami.exe"
    System.IO.File.Delete(ujfilehelye)
    Directory.CreateDirectory("\\" & strComputer & "\c$\update\")
    If System.IO.File.Exists(filemasolando) = True Then
    If System.IO.File.Exists(ujfilehelye) Then
    System.IO.File.Replace(filemasolando, ujfilehelye, Nothing)
    Else
    System.IO.File.Copy(filemasolando, ujfilehelye)
    End If
    End If

    Tehát ez tökéletesen jól működik (azaz kicsit kibővítve hibakezeléssel), viszont ha nem elérhető a c$ akkor totálisan szétfagy az egész ami azért sok gépnél rengeteg idő. Kellene valami ami ellenőrzi hogy működik-e a gép és elérhető a c$ (esetleg visszakapcsolni valahogy kóddal a file és nyomtatómegosztást)
    Fagyást backgroundworkerrel tudom enyhíteni de ez nem megoldás. Vagy csinálja vagy ne csinálja de ne csesszen el fél percet a próbálkozásra.

    (nemröhög!, kezdő vagyok és c64-en nőttem fel)

Új hozzászólás Aktív témák